0

問題が見つかりました... context.entity に MergeOption.NoTracking が設定されていました...ため息

私が間違っているのかわかりません。

ObjectStateManager で見つからなかったため、オブジェクトを削除できません。

        var deleteOrders = db.TABLE.Where(x => x.WCCR_ID == WccrId && x.ADAM == null).ToList();
        foreach (var item in deleteOrders)
        {

            db.TABLE.DeleteObject(item);
        }
        db.SaveChanges();

アイテム db.Attach(item) をアタッチしようとしましたが、「同じキーを持つオブジェクトが既に存在します」というエラーがスローされます。

ご協力いただきありがとうございます。乾杯

4

1 に答える 1

1

あなたのコードはよさそうです。使用してみてください:

var deleteOrders = db.TABLE.Where(x => x.WCCR_ID == WccrId && x.ADAM == null)
                           .ToList();
        foreach (var item in deleteOrders)
        {
            db.Entry(item).State = System.Data.EntityState.Deleted;            
        }
        db.SaveChanges();

アップデート

EF 4.0 はObjectContextクラスを使用します。

using(YourContext ctx = new YourContext())
{
   ctx.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Deleted);
}

EF 4.1 では、とDbContextのようなメソッドが定義されているクラスを使用します。Set<T>Entry

using(YourContext ctx = new YourContext())
{
   ctx.Entry(entity).State = System.Data.EntityState.Deleted;
}

更新 2

NuGet パッケージには EF 4.1 ランタイムのみが含まれており、Model First および Database First 開発で DbContext を使用するための Visual Studio 項目テンプレートは含まれていません。

ダウンロード: http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=26825

于 2012-06-01T23:16:39.093 に答える