2

私はエンティティモデルを持っています

class Package
{
...

    virtual ICollection<Owner> Owners { get; set; }
}

と操作を実装していAddOwner()ます。

エンティティフレームワークでは、呼び出すために、所有者を含むPackageオブジェクトを取得する必要がありますか?変更をデータベースに保存しますか?.Include(p => p.Owners)p.Add(newOwner)

二次的な質問:直感がCLRコレクションに基づいているのか、Entity Frameworkの原則に基づいているのかわからないため、直感はここでの答えに導きません。CLRコレクションの観点から考えるよりも物事をよりよく理解するのに役立つEFの原則はありますか?

4

3 に答える 3

1

Packageオブジェクトがコンテキストにアタッチされている限り、Ownersプロパティはに設定されますEntityCollection<Owner>。ロードされているかどうかに関係なく、そのプロパティを介した変更は、コンテキスト内の変更としてマークされ、SaveChanges()それらの変更が保存されます。

Ownerただし、オブジェクトが既存の所有者である場合は、オブジェクトがすでにコンテキストの一部である必要があることに注意してください。そうでない場合、EFは新しいを保存しようとしていると見なしますOwner

于 2013-01-14T19:47:57.927 に答える
0

所有者は遅かれ早かれ、そして確かにあなたがそれに何かを追加しようとする前に、具体的な何かを指摘しなければならないでしょう。EFは、ICollectionインターフェイスを介してこのプロパティを確認することを知っています。

次のようなことができます。

var p = new Package { SomePackageProperty = "Some value",
Owners = new List<Owner>>() { new Owner { SomeOwnerProperty = "Some other value" } } };

yourContext.DbSet<Package>().Add(p);

しかし、質問で提供された小さなスニペットを考えると、これは最良の推測です。

于 2013-01-14T19:39:44.303 に答える
0

Owners .Include(p => p.Owners)を含めてから、p.Owners.Add(new_owner)と言って、.SaveChangesの後に機能する新しいOwnerを追加することを考えていると思います。

于 2013-01-14T19:42:56.967 に答える