3

我一直在为这个问题绞尽脑汁,也许我没有正确看待它。

我有一个服务器端架构,看起来像这样 SQL Server --> EF --> WCF Data Service (oData)

有没有一种方法可以在不首先查询服务器的情况下更新服务器端实体。

从我读过的所有文档中,似乎需要查询才能将实体添加到上下文中以进行跟踪。一旦被跟踪,就可以对实体进行更改,然后可以调用 BeginSaveChanges 来执行更新。

我正在从 Windows Phone 应用程序访问我的 oData 服务,在该应用程序中,我将服务器实体(及其 ID)作为 POCO 对象存储在隔离存储中。我不存储从 WCF 代理客户端创建的 DTO。

我不想先查询实体,以节省带宽。

4

1 回答 1

4

是的,您需要创建一个虚拟实体,然后附加并保存它。

例如

using(var ctx = new MyContext())
{
   var dummyEntity = new MyEntity{ Id = 1 };
   ctx.MyEntities.Attach(dummyEntity); // EF now knows you have an entity with ID 1 in your db but none of its properties have changed yet
   dummyEntity.SomeProperty = 1; //the change to SomeProperty is now tracked
   ctx.SaveChanges();// a single update is called to set entity with Id 1's 'SomeProperty' to 1  
}

但是,这有一些问题,如果您有任何其他具有相同 ID 的实体附加到您的上下文,则附加将失败。因此,在执行此类操作时,最好将上下文的范围保持在非常小的范围内。

于 2012-08-20T20:06:51.503 回答