我最近做了这样的事情。正常的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;
}
}
}
我想知道detach能否自动清除所有id或不是。因为我需要在对象中自动清除所有的ID。 – Ellbar
@Ellbar添加了一个重置密钥的分离版本。我没有测试它,但它应该工作。以同样的方式,你可以重置你的参考资料等。 – Mats391