EFとC#を使用して、関連するレコードが多数存在するエンティティのクローンを作成しようとしています。私は関連するレコードもクローンしたいです。トップレベルのオブジェクトはBid
です。 ItemGroups
とEvaluators
さEntity Framework C# - 多対多リレーションを持つ子を持つオブジェクトのクローン
class Bid
{
Collection<ItemGroup> ItemGroups {get;set;}
Collection<Evaluator> Evaluators {get;set;}
}
子供たち。彼らは多対多である。
class ItemGroup
{
Collection<Evaluator> Evaluators {get;set;}
}
Class Evaluator
{
Collection<ItemGroup> ItemGroups {get;set;}
}
データベース
Bid bid = dbContext.Bids.AsNoTracking().FirstOrDefault()
.Include(b => b.ItemGroups)
.Include(b => b.ItemGroups.Select(e => e.Evaluators))
と問題が多く-にある
database.Bids.Add(bid);
database.SaveChanges();
バックでBid
を追加することを照会することによって、私はBid
のクローンを作成し、それがすべての子供たちです〜Evaluators
とItemGroups
の間の多くの関係彼らのコレクションはお互いを参照しているので、Bid
を追加すると、レコードは複製されます。で、
Original Bid -
Number of ItemGroups = 3
Number of Evaluators = 2
と、クローンの後、私が持っている新しい入札:明らかに間違っている
New Bid -
Number of ItemGroups = 3
Number of Evaluators = 6
だから、クローンの前に、私は、入札があります。 EFが重複を追加することなくこの関係をどのようにクローンしますか?
問題は私の元のクエリですか?私はBid -> Evaluators -> Item Groups
から.Include()s
トレースを使用して、または単にBid -> Evaluator
とBid -> ItemGroup
に行くすべての種類のオプションを試してみましたが、何も私が望むものを得ることはできません。すべての助けが大変ありがとうございます。私が何らかの説明をすることができれば教えてください。前もって感謝します。
トラッキングを有効にしてエンティティを取得し、変更を保存する前にエンティティの状態を追加することをお勧めします。 https://msdn.microsoft.com/en-us/data/jj592676.aspx これは、あなたの例でItemGroupsとElevatorsの複製につながるとは思わないが、これはテストしていない。 – James
ありがとうございました。私はそれが私が行きたいと思う方法であるとは完全には分かっていません。それは、エンティティをグラフの下にもっと遠くにクローンすると、予期しない動作につながります。 – kdeez