3

私はこの問題で頭を悩ませてきました、そしておそらく私はそれを不適切に見ていません。

このSQLServer->EF-> WCF Data Service(oData)のようなサーバー側アーキテクチャがあります

最初にサーバーにクエリを実行せずにサーバー側のエンティティを更新する方法はありますか?

私が読んだすべてのドキュメントから、追跡のためにエンティティをコンテキストに追加するにはクエリが必要であるように見えます。追跡したら、エンティティに変更を加えることができ、BeginSaveChangesを呼び出して更新を実行できます。

Windows PhoneアプリからoDataサービスにアクセスしています。ここでは、サーバーエンティティ(IDを含む)をPOCOオブジェクトとして分離ストレージに保存しています。WCFプロキシクライアントから作成されたDTOを保存しません。

帯域幅を節約するために、最初にエンティティにクエリを実行したくありません。

4

1 に答える 1

4

はい、あります。ダミーエンティティを作成してから、アタッチして保存する必要があります。

例えば

using(var ctx = new MyContext())
{
   var dummyEntity = new MyEntity{ Id = 1 };
   ctx.MyEntities.Attach(dummyEntity); // EF now knows you have an entity with ID 1 in your db but none of its properties have changed yet
   dummyEntity.SomeProperty = 1; //the change to SomeProperty is now tracked
   ctx.SaveChanges();// a single update is called to set entity with Id 1's 'SomeProperty' to 1  
}

これにはいくつかの問題がありますが、同じIDを持つ他のエンティティがコンテキストにアタッチされている場合、アタッチは失敗します。このため、この種のアクションを実行するときは、コンテキストの範囲を非常に小さく保つのが最善です。

于 2012-08-20T20:06:51.503 に答える