0

我是实体框架的新手,遇到以下问题:

我从用于填充网格的 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。我究竟做错了什么?

4

0 回答 0