私は Entity Framework を初めて使用し、次の問題があります。
グリッドの作成に使用される ObjectContext (RepEntities) からオブジェクトのリストを取得します。グリッドにより、ユーザーはバインドされたオブジェクトを変更および選択できます。これが完了したら、選択したオブジェクトを別の親オブジェクトに追加します。問題は、特定のオブジェクトのプロパティが変更されると、同じ選択された子オブジェクトを持つ他の親オブジェクトのプロパティも変更されることです。したがって、ObjectSet は毎回同じオブジェクトへの参照を返します。
次のように、ObjectSet 内のオブジェクトを手動で複製することで問題を解決しました。
public List<mblDataItem> GetSupportDataItems()
{
var items= (from e in RepEntities.jblDatItemDatTypes
where e.mblDataType.dtDsc == "Support"
select e.mblDataItem).OrderBy(p => p.diDsc).ToList();
mblDataItem di;
List<mblDataItem> diItems = new List<mblDataItem>();
foreach (var item in items)
{
di = new mblDataItem();
di.diID = item.diID;
di.diDsc = item.diDsc;
di.diSQL = item.diSQL;
di.Influence = item.Influence;
di.Comment = item.Comment;
di.PrimValue = item.PrimValue;
di.CompValue = item.CompValue;
diItems.Add(di);
}
return diItems;
}
ObjectSet を複製/複製する適切な方法は何ですか? また、私がやっている方法では、ナビゲーション プロパティを使用して関連エンティティを取得することはできません。
更新:わかりましたので、Linq-to-Entities でのエンティティのクローン作成で
説明され、Schwarzie2478によって提案されたとおりに実行してみました。
複数のオブジェクトを複製する必要があるため、これはうまくいきません。私が必要とするのは、プロパティを互いに独立して設定できるが、挿入が正しく行われるように、同じ EntityKey を持つ mblDataItems の複数のコレクションを持つことです。SaveChanges() を呼び出すと、追加の mblDataItems が挿入され、既存の mblDataItem ID の代わりに、結合テーブルに新しく挿入された ID が使用されるため、最初のソリューションに欠陥があることにも気付きました。私は何を間違っていますか?