私は、他の複数のエンティティを熱心に読み込んだ2つの分離エンティティを持っています。 (1対nの関係)。エンティティフレームワークのアタッチ参照先エンティティの自動再帰的なアタッチによる例外
離散したエンティティ(ICollectionナビゲーションプロパティに格納されている)を参照する熱心に読み込まれたエンティティは、2つの分離エンティティの両方に存在できます。
デタッチされたエンティティを両方とも添付したい場合、熱心に読み込まれたエンティティが既に添付されているため、例外が発生します。
これは、問題を説明するコメントを有する典型的なコードです:
public ProvokeAttachException()
{
//s1 and s2 share some of their samples
sample_set s1 = GetSampleSet(1);
sample_set s2 = GetSampleSet(2);
//Do some stuff
//Attaching the sample_sets again
using(StationContext context = new StationContext())
{
// Fine
context.sample_set.Attach(s1);
//Throws Exception because some of the included samples in sample_set
//have been attached automatically with s1
context.sample_set.Attach(s2);
}
}
public sample_set GetSampleSet(int setId)
{
//Eager Loading all samples that reference sample_set (1 to n relation)
using (StationContext context = new StationContext())
{
return context.sample_set.Include("sample").FirstOrDefault(s => s.id = setId);
}
}
私は例外なく両方のエンティティを添付できますか?
データモデリングに関する詳細情報を提供してください。あなたはそれでいくつかのリファクタリングをする必要があるかもしれません。オブジェクトがすでにアタッチされている場合は、再度アタッチすることはできません。 – PedroSouki
@PedroSoukiエンティティをもう一度付けることはできません。私は新しい文脈を持っており、s1とs2を付けることが私が最初に行うことなので、すでに取り付けることはできません。それは熱心に読み込まれ、それらのいくつかはs1とs2によって共有される「サンプル」エンティティのためです。 Attachは、ナビゲーションプロパティに含まれるすべての参照エンティティを再帰的かつ自動的に添付します。私はどのように例外を避けることができ、s1とs2に含まれるすべてのエンティティがアタッチされるのか分かりません –