0

キーと値のペアのリストを含むデータのテーブルがあります。

Key            Value
--------------------
ElementName    PrimaryEmail 
Email          someemail@gmail.ca   
Value          Content/Images/logo-here.jpg

クライアントの Web ページで新しいアイテムを生成できます。クライアントで新しい行を作成し、次のコードを実行してサーバーに保存すると、期待どおりにアイテムがデータベースに保存されます。

public ViewResult Add(CardElement cardElement) 
{      
   db.Entry(obj).State = EntityState.Added;
   db.SaveChange();
   return Json(obj);
}

ここで、別の ajax リクエストを送信してオブジェクトを削除しようとすると、失敗します。

public void Delete(CardElement[] cardElements)
{
    foreach (var cardElement in cardElements)
    {
        db.Entry(cardElement).State = EntityState.Deleted;
    }
    db.SaveChanges();
}

これにより、次のエラーが発生します。

Store update、insert、または delete ステートメントが予期しない数の行 (0) に影響を与えました。エンティティが読み込まれてから、エンティティが変更または削除された可能性があります。ObjectStateManager エントリを更新します。

IDによる検索、削除、添付、削除など、他の削除方法を試しましたが、明らかに正しい方法でアプローチしています。

4

1 に答える 1

0

問題の原因はわかりませんが、削除を次のように構成する傾向があります。

public void Delete(CardElement[] cardElements)
{
    foreach (var cardElement in cardElements)
    {
        var element = db.Table.Where(x => x.ID == cardElement.ID).FirstOrDefault();

        if(element != null)
           db.DeleteObject(element);
    }
    db.SaveChanges();
}

私はデータベースを最初に開発する傾向がありますが、状況が少し変わる可能性があります。

EDIT:あなたが受け取っているエラーは、行が更新されていないことを示しています。オブジェクトをビューに渡し、それをコントローラーに戻すと、オブジェクトとデータ ストアの間のリンクが壊れる傾向があります。そのため、オブジェクトがデータ ストアにリンクされたままになるように、最初に ID に基づいてオブジェクトを検索することを好みます。

于 2012-06-19T11:10:57.757 に答える