我有一个运行实体框架 6 的 WCF 服务器应用程序。
我的客户端应用程序通过 DataServiceContext 使用来自服务器的 OData,并且在我的客户端代码中,我希望能够在上下文中调用 HasChanges() 方法以查看其中的任何数据是否已更改。
我尝试使用以下扩展方法:
public static bool HasChanges(this DataServiceContext ctx)
{
// Return true if any Entities or links have changes
return ctx.Entities.Any(ed => ed.State != EntityStates.Unchanged) || ctx.Links.Any(ld => ld.State != EntityStates.Unchanged);
}
但它总是返回 false,即使它正在跟踪的实体确实发生了变化。
例如,假设我有一个名为 Customer 的跟踪实体,以下代码总是在调用 SaveChanges() 之前返回。
Customer.Address1 = "Fred"
if not ctx.HasChanges() then return
ctx.UpdateObject(Customer)
ctx.SaveChanges()
如果我注释掉if not ctx.HasChanges() 然后返回代码行,则更改已成功保存,因此我很高兴实体已收到更改并能够保存它。
似乎上下文正在跟踪更改,只是我无法从我的代码中确定这一事实。
谁能告诉我如何确定 DataServiceContext 上的 HasChanges?