我是实体框架的新手,遇到以下问题:
我从用于填充网格的 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 的建议进行操作。
这对我不起作用,因为我需要克隆多个对象。我需要的是拥有多个 mblDataItems 集合,它们的属性可以相互独立设置,但仍然具有相同的 EntityKey,以便正确完成插入。我还注意到我的第一个解决方案存在缺陷,因为当我调用 SaveChanges() 时,它会插入额外的 mblDataItems,然后在我的连接表中使用新插入的 ID,而不是现有的 mblDataItem ID。我究竟做错了什么?