デタッチしたエンティティのリストを削除しようとしています。削除するエンティティは、例えば、他のエンティティ(外部キー)との関係を持っている:いくつかのケースではデタッチエンティティが同じ外部キーを共有しているがオブジェクトインスタンスが異なる場合、それらを削除する方法はありますか?
public class Foo
{
public int BarId {get;set;}
public virtual Bar Bar {get;set;}
}
は、2つのFooのエンティティが同じバーのIDを持っているかもしれません。しかし、これらは分離されたエンティティであり、コンテキストによって追跡されないため、2つのFooエンティティは2つの固有のBarエンティティを持ちます。
public virtual void Delete(T entity)
{
DbEntityEntry dbEntityEntry = dataContext.GetEntry(entity);
if (dbEntityEntry.State != EntityState.Deleted)
{
dbEntityEntry.State = EntityState.Deleted;
}
else
{
dbSet.Attach(entity);
dbSet.Remove(entity);
}
}
これは、最初のFooエンティティのために動作します:私は(一般的なリポジトリクラスで)やってるのFooを削除するには
。バーが同じである他のFooエンティティのために、私は例外を取得:同じタイプの別のエンティティは、すでに仕事と同じ主キーの値
を持っているので、タイプのエンティティをアタッチ
に失敗しました私はを呼び出す前に
Foo.Bar = null
と設定しています。これは正常に動作します。ただし、コンテキストから複数のエンティティを削除する方が良いでしょうか?
のように、あなたが直接SQL文を使用することができますエンティティを削除したい場合は、ASP.NET MVC [上の私の答えを見ているかもしれない - タイプのエンティティをアタッチ「MODELNAME」同じタイプの別のエンティティがすでに同じプライマリキー値を持っているために失敗しました](http://stackoverflow.com/questions/23201907/asp-net-mvc-attaching-anentity-of-type-modelname-failed- -another-ent/39557606#39557606)。 –