Обновлять только измененные столбцы, используя Entity Framework и службы RIA. - PullRequest
1 голос
/ 12 сентября 2011

Я использую Entity Framework, запущенный клиентом, который подключен к базе данных с помощью RIA Services.Всякий раз, когда что-то сохраняется от клиента, обновляются все столбцы в соответствующей строке.

Является ли это преднамеренным поведением, или я могу каким-то образом заставить наборы изменений, которые распространяются через доменные службы RIA, обновлять только фактически измененные столбцы

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

В вашем методе Update<T> вам нужно будет выполнить следующее ...

Это необходимо сделать для каждого метода обновления, и вам потребуется получить dbOriginal на основе первичного ключа для этого конкретного объекта..

// change state of entity as Unmodified/Unchanged...
original.EntityState = Unchanged;

// this is copy form database...
// Use different context
MyOrderContext context = new MyOrderContext();
Order dbOriginal = context.Orders.First( x=>x.OrderID == original.OrderID);

foreach(PropertyInfo p in copy.GetTypes().GetProperties()){
   Object originalValue = p.GetValue(dbOriginal);
   Object newValue = p.GetValue(original);
   if(originalValue!=null && newValue!=null 
       && originalValue.Equals(newValue)){
       continue;
   }
   // resetting this will 
   // make entity's only current
   // property as changed
   p.SetValue(original,originalValue);
   p.SetValue(original,newValue);
}
0 голосов
/ 12 сентября 2011

Единицей передачи / изменения в RIA Services (и Entity Framework в этом отношении) является Entity.

Почему вы хотите обновлять только те столбцы, которые изменяются, когда большую часть времени пишутся целые строкив любом случае в бизнес-приложениях с SQL?Обычно требуется больше вычислительной мощности / кода / времени для обновления только определенных столбцов строки.

Если вы хотите что-то более гранулярное, вам нужно будет создавать сущности для каждого свойства каждой строки, но мне понадобитсяочень веская причина для этого.Можете ли вы уточнить свои цели?

...