を持っています6.Entity Frameworkの6 - DataServiceContextのは、検出は、私はEntity Frameworkのを実行している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()を呼び出す前に戻ります。私は場合はコメントアウトした場合ではないctx.HasChanges()は、コードの行を返す
Customer.Address1 = "Fred"
if not ctx.HasChanges() then return
ctx.UpdateObject(Customer)
ctx.SaveChanges()
は、変更が正常に保存されているので、私は、エンティティが変更を受けたとすることができたことがうれしいですそれを保存。
私が私のコードからその事実を決定することができないだけという、変更あるは、文脈によって追跡なっているようです。
DataServiceContextでHasChangesを特定する方法を教えてもらえますか?
おそらく、私はユースケースを理解していませんが、単にSaveChanges()を呼び出すだけではないのですか?変更がなければ、EFは何もしません。おそらく、EFは内部的に似たようなことをしています。あなたはホイールを再発明しているだけです。 – Vlad274
ありがとうございましたVladさん、実際にデータを保存する前に、「変更を保存してもよろしいですか?」というダイアログをポップアップします。変更がなければ、私はダイアログをポップアップしたくありません。 –