2016-01-30 3 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 и не может найти способ сделать для него другой объект null. Когда я прошу copy.other; он по-прежнему возвращает другой объект как связанный.

Любое пожалуйста?

+0

Вы можете показать более полный пример? –

+0

Это действительно странная ситуация, и я не знаю, как объяснить, что мне лучше поверить. – MrGorki

ответ

0

Чтобы клонировать объект Entity Framework, вы можете просто отсоединить объект от DataContext, а затем снова добавить его в EntityCollection.

context.Detach (entity); entityCollection.Add (сущность);

+0

, но все другие связанные объекты также приходят, и я не хочу их – MrGorki

0

Вы можете попробовать это:

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

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

трюк здесь AsNoTracking() - когда вы загружаете объект вроде этого, ваш контекст не знает об этом, и когда вы вызываете SaveChanges, он будет рассматривать его как новый объект.

Если Инд.Сброс имеет ссылку на MyProperty и вы хотите копию этого тоже, просто использовать Включают:

var originalEntity = Context.MySet.Include("MyProperty") 
          .AsNoTracking() 
          .FirstOrDefault(e => e.Id == 1); 
Смежные вопросы