我在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;它仍然将其他对象作为链接返回。
有人请吗?
答案 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);