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;
它没有变为空,并且找不到使另一个实体为空的方法。当我要求复制时;它仍然返回链接的其他对象。
有人请吗?
要在实体框架中克隆实体,只需将实体从 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);