2016-01-30 82 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);