2016-01-30 45 views
0

我在Entity Framework中有两个链接的对象,但是我想创建它们之一的分离克隆而没有关系。EF:从另一个对象中删除对象

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; 

它没有变为空,也找不到让其他实体为null的方法。当我要求copy.other;它仍然返回链接的其他对象。

有人请吗?

+0

你能告诉一个更完整的例子吗? –

+0

这真的是一个奇怪的情况,我不知道如何解释它更好地相信我。 – MrGorki

回答

0

要在Entity Framework中克隆实体,您可以简单地将实体从DataContext分离出来,然后将其重新添加到EntityCollection中。

context.Detach(entity); entityCollection.Add(entity);

+0

但所有其他链接的实体也来了,我不希望他们 – MrGorki

0

你可以试试这个:

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

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

这里的诀窍是AsNoTracking() - 当你加载一个这样的实体时,你的上下文不知道它,当你调用SaveChanges时,它会把它当作一个新的实体对待。

如果MYSET有myProperty的一个参考,你想它的一个副本也只需使用一个包含:

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