仅使用Entity Framework和RIA服务更新已修改的列

时间:2011-09-12 12:01:32

标签: silverlight entity-framework ria

我正在使用Entity Framework,前面是一个使用RIA Services连接到数据库的客户端。每当从客户端保存某些内容时,受影响行中的所有列都会更新。

这是故意的行为,还是我可以某种方式强制通过RIA域服务传播的变更集只更新实际更改的列?

2 个答案:

答案 0 :(得分:1)

Update<T>方法中,您必须执行以下操作...

您必须为每个Update方法执行此操作,并且您需要根据该特定对象的主键获取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);
}

答案 1 :(得分:0)

RIA服务(以及该事项的实体框架)的转移/变更单位是一个实体。

为什么您希望只更新在大多数情况下使用SQL在业务应用程序中编写整行时更改的列?它通常需要更多的处理能力/代码/时间才能更新一行的特定列。

如果你想要更细粒度的东西,你需要为每一行的每个属性创建实体,但我需要一个非常字符串的理由来做到这一点。你能说明你的目标吗?