4

関連するコレクションを使用して切り離されたエンティティを変更します。例:

Person と Address は POCO です。

エンティティを添付して変更を保存すると、コレクションの変更が検出されません。住所 (追加および削除されたアイテム) を持つ個人を更新するにはどうすればよいですか?

コレクションを手動で追跡する必要がありますか?

編集

切り離されたPOCOの同期は手動で行う必要があります... EFはコレクションのマージソリューション(ナビゲーションプロパティと関係)を目的としていません:(

現在のコレクションと元のコレクションを比較し、違いを検出します

4

2 に答える 2

1

Entity Frameworkを使用している場合(質問にタグとしてリストしたためだと思います)、オブジェクトは、エンティティコンテキストによって生成された場合にのみ変更を追跡します。

User someUser = dbEntities.Users.Single(x => x.Username == "test");
someUser.Name = "changed name";
db.SaveChanges();

そのコードは変更を検出して永続化します。

User someUser = new User()
{
    Username = "test" //assuming there is already user called test in the database.
}

この方法でユーザーを作成すると、EFコンテキストが変更を検出できなくなります。代わりに、データベースからエンティティをロードして更新し、変更を永続化する必要があります。

string username = "test";
User someUser = db.Users.Single(x => x.Username == username);
TryUpdateModel(someUser, valueProvider); //valueProvider is usually a form collection of some sort, but could be anything that implements IValueProvider.
db.SaveChanges();

これにより、エンティティをプルして更新し、変更を保存することができます。

于 2011-03-07T23:33:59.367 に答える
1

デタッチされた POCO クラスを操作して、コンテキストに再アタッチし、状態を変更済みに設定することもできます。

この記事を読む: http://blogs.msdn.com/b/adonet/archive/2011/01/29/using-dbcontext-in-ef-feature-ctp5-part-4-add-attach-and-entity- states.aspx

于 2011-09-06T18:35:28.387 に答える