让我们假设我有一个对象,我想清除它的id和所有导航属性。分离是可能的吗?如果是,那么我该如何在EF核心中执行此操作?
{
details : {
name : "Vyshakh",
martial_status : "Single"
}
}
答案 0 :(得分:1)
我最近做了类似的事情。普通的DbContext没有分离方法,所以我添加了一个。
public void Detach<T>(T entity)
where T : class
{
Entry( entity ).State = EntityState.Detached;
}
接下来我做了一个分离和重置实体的方法。我专门针对一个实体,但概念是这样的。
public void DetachAndResetKeys(Car entity)
{
// Load references if needed
// Detach
_dbContext.Detach( entity );
// Reset Key. 0 equals not set for int key
entity.Id = 0;
entity.CarType = null;
}
更新:在分离时重置键。如果键可以是不同类型,也需要处理它。这里只有int
public void Detach<T>(T entity)
where T : class
{
Entry( entity ).State = EntityState.Detached;
foreach(var prop in Entry( entity ).Properties) {
if (prop.Metadata.IsKey()) {
prop.CurrentValue = 0;
}
}
}