我有运行实体框架WCF服务器应用程序6.实体框架6 - DataServiceContext检测也已经被修改
我的客户端应用程序消耗的OData从通过DataServiceContext的服务器,在我的客户端代码中,我希望能够调用上下文中的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()
如果我注释掉如果不是ctx.HasChanges(),然后返回行代码,改变被成功保存,所以我很高兴的是,实体已收到的变化,并能保存。
看来,变化是越来越上下文跟踪,只是我不能确定从我的代码这一事实。
谁能告诉我如何确定DataServiceContext上的HasChanges?
也许我不明白用例,但为什么不直接调用SaveChanges()呢?如果没有改变,EF不会做任何事情。据推测,EF在内部做了类似的事情,而你正在重新发明轮子。 – Vlad274
感谢Vlad,我想在实际保存数据之前弹出一个对话框,说出“你确定要保存更改”。如果没有变化,我不想弹出对话框。 –