我有運行實體框架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,我想在實際保存數據之前彈出一個對話框,說出「你確定要保存更改」。如果沒有變化,我不想彈出對話框。 –