私は最近このようなことをしました。通常のDbContextには分離されたメソッドがないので、私はそれを追加しました。
public void Detach<T>(T entity)
where T : class
{
Entry(entity).State = EntityState.Detached;
}
次は、エンティティを切り離してリセットする方法を作成しました。私は1つのエンティティに対して特別に作成しましたが、コンセプトはこれに似ています。
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;
}
}
}
デタッチが自動ですべてのIDをクリアできるかどうかは疑問でした。オブジェクト内のすべてのIDを自動的にクリアする必要があるためです。 – Ellbar
@Ellbarはキーをリセットするデタッチバージョンを追加しました。私はそれをテストしなかったが、それは動作するはずです。同じ方法であなたの参照などをリセットすることができます – Mats391