は、このアプローチを使用します。また、あなたのエンティティでEquals
とGetHashCode
をオーバーライドする場合
public class Company
{
public int Id { get; set; }
public string Name { get; set;}
private ICollection<User> _users;
public ICollection<User> Users
{
get
{
return _users ?? (_users = new HashSet<User>());
}
set
{
_users = value;
}
}
}
HashSet
は、他のコレクションその後、より良いです。それはあなたの重複を処理します。また、遅延コレクションの初期化が優れています。私はそれを正確に覚えていませんが、コンストラクタでコレクションを初期化し、遅延ロードと変更追跡のために動的プロキシを使用したとき、最初のEFテストアプリケーションで問題が発生したと思います。
エンティティには、分離型と添付型の2種類があります。添付されたエンティティは既にコンテキストによって追跡されています。あなたは通常、linq-to-entitiesクエリから、またはDbSet
のCreate
を呼び出して、添付されたエンティティを取得します。分離されたエンティティはコンテキストによって追跡されませんが、このエンティティを添付するためにAttach
またはAdd
をコールすると、関連するすべてのエンティティが追加/追加されます。分離されたエンティティで作業するときに対処する必要がある唯一の問題は、関連するエンティティがすでにデータベースに存在し、新しい関係を作成することだけであるということです。
あなたが理解しなければならない主なルールは追加して、取り付け方法の違いです:Added
=>すべての関連企業が新しいものとして挿入されるように
データベース。
デタッチしたエンティティグラフを使用している私自身の経験では、特にリレーションを削除した後では、データベースからエンティティグラフを読み込み、手動ですべての変更を完全に追跡できる添付グラフに変更をマージします。
異なるコンテキストのエンティティを混在させることはできません。あるコンテキストから別のコンテキストにエンティティをアタッチする場合は、最初にエンティティを明示的にデタッチする必要があります。最初の文脈で、状態をDetached
に設定することでそれができることを願っています。
この瞬間、私はHashSetとCollection(私はHashSetを選んでいます)との違いはあまりありません。あなたは私の文脈をどのように管理するのかを理解する助けになります。ユーザーを取得する前にCompanyRepositoryのコンテキストをUserRepositoryに設定しました。これは私に迅速なworkigソリューションを与える。本当にありがとうございます。 – bizon