Entity Framework 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() then returnコード行をコメントアウトすると、変更が正常に保存されるので、エンティティが変更を受け取り、保存できることを嬉しく思います。
私のコードからその事実を判断できないだけで、変更はコンテキストによって追跡されているようです。
DataServiceContext で HasChanges を特定する方法を教えてもらえますか?