- Хроники. - -
Метод SaveOrUpdate для Linq to SQL.
Posted By Ikutsin On 15 октября 2008 @ 9:54 In .NET C#,MSSQL | Comments Disabled
В сети можно встретить большое количество дискуссий о проблеме обновления записи с помощью 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.
Все это выглядит странно, особенно после того, что этот метод должен именно обновлять, а не добавлять запись. Следующие варианты тоже работать не будут
Нашим решением является 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 [1]
Article printed from Хроники.:
URL to article: /157-metod-saveorupdate-dlya-linq-to-sql
URLs in this post:
[1] LINQ to SQL and attaching Entities: http://www.west-wind.com/weblog/ShowPost.aspx?id=134095
Click here to print.
Copyright © 2008 Все, что меня окружает. All rights reserved.