EF:从另一个对象中删除对象

本文关键字:删除 对象 一个对象 EF | 更新日期: 2023-09-27 18:32:38

>我在实体框架中有两个链接对象,但我想创建其中一个对象的分离克隆而没有关系。

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;

它没有变为空,并且找不到使另一个实体为空的方法。当我要求复制时;它仍然返回链接的其他对象。

有人请吗?

EF:从另一个对象中删除对象

要在实体框架中克隆实体,只需将实体从 DataContext 中分离出来,然后将其重新添加到 EntityCollection 中即可。

上下文。分离(实体);entityCollection.Add(entity);

你可以试试这个:

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);