我是实体框架的新手,遇到以下问题:
我从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的正确方法是什么?此外,我这样做的方式我将无法使用导航属性来获取相关实体。
的更新:
好的,所以我尝试按照Cloning an Entity in Linq-to-Entities上的解释并由Schwarzie2478建议。
这对我不起作用,因为我需要克隆多个对象。我需要的是拥有多个mblDataItem集合,这些集合的属性可以相互独立设置,但仍然具有相同的EntityKey,因此插入操作正确完成。我还注意到我的第一个解决方案是有缺陷的,因为当我调用SaveChanges()时,它会插入额外的mblDataItems,然后在我的连接表中使用新插入的ID,而不是现有的mblDataItem ID。我究竟做错了什么?