克隆/复制ObjectSet及其实体的正确方法是什么?

时间:2012-02-09 09:45:15

标签: c# entity-framework clone objectset

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

我从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。我究竟做错了什么?

0 个答案:

没有答案