EF:从另一个中删除对象

时间:2016-01-30 22:13:09

标签: c# .net entity-framework

我在Entity Framework中有两个链接对象,但我想在没有关系的情况下创建其中一个的分离克隆。

public class Object
{
 //....ids etc.
 public virtual OtherObject other { get; set; }
}

public class OtherObject
{
 //....ids etc.
 public virtual Object oObject { get; set; }
}

所以当我尝试分离对象的副本时,如:

var copy = _db.Objects.AsNoTracking().FirstOrDefault(m=> m.id == id); //we have an id column and I have id parameter to use it for searching

并尝试删除链接的其他对象(因为它也被克隆);

copy.other = null;

它没有变为空,也无法找到使另一个实体为空的方法。当我要求copy.other;它仍然将其他对象作为链接返回。

有人请吗?

2 个答案:

答案 0 :(得分:0)

要在Entity Framework中克隆实体,您只需从DataContext中分离实体,然后将其重新添加到EntityCollection。

context.Detach(实体); entityCollection.Add(实体);

答案 1 :(得分:0)

你可以试试这个:

var originalEntity = Context.MySet.AsNoTracking()
                             .FirstOrDefault(e => e.Id == 1);

Context.MySet.Add(originalEntity); Context.SaveChanges();

这里的技巧是AsNoTracking() - 当您加载这样的实体时,您的上下文不知道它,当您调用SaveChanges时,它会将其视为一个新实体。

如果MySet有MyProperty的引用而你想要它的副本,只需使用Include:

var originalEntity = Context.MySet.Include("MyProperty")
                            .AsNoTracking()
                            .FirstOrDefault(e => e.Id == 1);