0

linqまたは.Findコマンドを使用してデータベースオブジェクトをロードすると、呼び出しにも含まれているサブコレクションが自動的にアイテムをchangetrackerに追加し、それらを保存すると思います。

entity.Children.Add(entityChild);

これにより、アタッチされたエンティティの変更トラッカーに問題なく追加されます。

ただし、新しいエンティティを作成していて、コンストラクターでICollectionを新しいHashSet()に設定した場合、Children.Add(entityChild)行を実行しても、変更トラッカーには追加されません。

新しいオブジェクトのICollectionを初期化して、子に追加するときに変更トラッカーに追加するにはどうすればよいですか?

また、親を追加した場合(つまり、親を作成し、子を追加してから、親をDbSetに追加すると、変更トラッカーに子を追加する必要があります)、変更トラッカーに新しいすべての子も追加することになっていると思いました。 )。

ありがとう!

4

1 に答える 1

1

変更の追跡が有効になっているエンティティタイプの新しいインスタンスを作成する場合は、 DbSetのCreateメソッドを使用する必要があります。

でDetectChangesメソッドを呼び出すことにより、変更検出を手動で開始することもできますDbContext.ChangeTracker

最後に、POCOクラスに多くのコードを追加する場合は、自己追跡エンティティテンプレートによって生成されるコードを確認できます。これは、データベースのクエリ時に返されるオブジェクトにEFが使用するコードと実質的に同じです。

于 2012-11-09T22:00:10.767 に答える