В сети можно встретить большое количество дискуссий о проблеме обновления записи с помощью LINQ. У каждого есть свое решение, но все сводится к тому, что метод Attach в классе DataContext работает, мягко говоря, не совсем так как должен.
Например следующий кусок кода может сильно разочаровать:
public bool Update(tt_customer customer){
context = new TimeTrakkerContext();tt_customer Tcust = context.tt_customers.Single(c => c.Pk == customer.Pk);
context.tt_customers.Attach(customer, Tcust);
context.SubmitChanges();return true;
}
Вполне вероятно, что метод Attach выбросится со следующей ошибкой: Cannot add an entity with a key that is already in use.
Все это выглядит странно, особенно после того, что этот метод должен именно обновлять, а не добавлять запись. Следующие варианты тоже работать не будут
- context.tt_customers.Attach(customer, true);
- An entity can only be attached as modified without original state if it declares a version member or does not have an update check policy.
- context.tt_customers.Attach(customer);
customer.Address = customer.Address;: Cannot add an entity with a key that is already in use.
: context.tt_customers.Attach(customer); - Просто ничего не сделает
Нашим решением является Reflection. Мы просто обновляем все свойства старого объекта из нового.
var originalEntity = dc.GetTable().Where(x => x.id== newEntity.id).SingleOrDefault();foreach (var property in newEntity.GetType().GetProperties())
{
PropertyInfo orignProperty = originalEntity.GetType().GetProperty(property.Name);
orignProperty.SetValue(originalEntity, property.GetValue(newEntity, null), null);
}dc.SubmitChanges();
Источник LINQ to SQL and attaching Entities
Метки:C#, разработка
Я уже говорил о добавлении видео на сайт без использования YouTube и ему подобных сервисов в моей ранней статье.
Оказалось, что Flash проигрывателей видео в интернете просто завались. На любой вкус и лад.
Продолжить чтение »
Бывает так, что при первом подключении к базе из .NET приложения вылетает следующий exception:
Login failed for user ‘user’. Reason: The password of the account must be changed.
Метки:разработка, база данных
Это краткое описание того, как с генерировать скрипт создания схемы базы (включая хранимые процедуры, функции, триггеры, зависимости и проекции).
Для этого понадобится SQL Server Management Studio, которая входит в состав поставки базы. Впрочем, тоже самое можно сделать и из студии (VS2008 или VS2005).
Продолжить чтение »
Метки:разработка, база данных
В рамках собственной лицензии, Microsoft уже некоторое время назад открыла исходной код некоторых классов .NET. Возникает вопрос, как же этот код получить. Узнать о распространении можно на сайте Microsoft Reference Source Code Center.
Продолжить чтение »
FFLL to .NET закончен. Это C# реализация Free Fuzzy Logic Libarary. Дальнейшее использование этой библиотеки в качестве основной для создания нечетких расчетов ставится из за отсутствия поддержки со стороны авторов, а также не полной реализации FCL спецификации. Все что не поддерживается библиотекой выделено серым шрифтом на странице FCL Production Rules на сайте FCL.
Отказатся от FFLL решено в пользу FuzzyNet — библиотеки, полностью написанной на C#. Достоинства очевидны: проект жив и поддерживается автором, а также доступен код, доступный для изменений.
Метки:C#, разработка, авторские программы
Я начал новый раздел, посвященный искусственному интеллекту.
Он связан с продолжением разработки анализатора торговых рынков. Основная часть проекта закрыта. Хотя многие ее части будут открыты. Например, сейчас начата работа с FFLL. Это С++ библиотека работающая со стандартом FCL. Первый проект это создание совместимости FFLL с C#. Подробности об этом можно узнать на сайте проекта.
Одной из плохих новостей можно считать потерю исходного кода моей не законченной игры Planes. Это был мой первый опыт использования искусственного интеллекта.
Метки:разработка, обзор, обо мне
При работе с ASP.NET часто требуется запретить кеширование страниц браузером. Под страницами тут можно понимать любой ответ с сервера. Будь то HTML, AJAX XHR, картинка или любой другой файл.
Задача сводится к добавлению в ответ определенных заголовков, позволяющих управлять кешем. Продолжить чтение »
Метки:ASP.NET, C#, разработка
Что такое //Inversion Of Control//?
Это еще один подход к программированию в ООП. Я бы сказал один из основных подходом для программ среднего и большого размера.
Для новичка, как я помню себя, подход может показаться довольно запутанным. Понимание любого подхода, а главное его значения, приходит со временем. Продолжить чтение »
Метки:C#, справочник