0

まず第一に、私はちょうど初心者です.IDをビューからコントローラーに渡してSQLのレコードを削除しようとすると、以下が私のコードです:

注: 「username」はテーブル「T_Users」の PK です。

#region Delete record function
        public ActionResult Delete(string id ) {
            T_Users temp_u = new T_Users() { Username = id  };
            //db.T_Users.Attach(new T_Users() { Username = id });
            db.T_Users.Remove(temp_u);


            try
            {
                db.SaveChanges();
                //return View();
            }
            catch(Exception e) {
                return Content("hehe");
            }
            return RedirectToAction("Index");
        }
        #endregion

T_Users.Attach() メソッドを呼び出すと、「同じキーを持つオブジェクトが ObjectStateManager に既に存在します。ObjectStateManager は、同じキーを持つ複数のオブジェクトを追跡できません」と表示されました。

次に、「オブジェクトが ObjectStateManager に見つからなかったため、オブジェクトを削除できませんでした」という理由で失敗したとコメントしました。

誰かが解決策についていくつかのアイデアを提供できますか?

4

2 に答える 2

2

オブジェクトを削除しようとする前にデータ コンテキストからオブジェクトを取得するのではなく、既存のオブジェクトと同じ ID を割り当てて新しい切り離されたオブジェクトを作成し、それを削除しようとしています。

最初にデータ コンテキストから削除するオブジェクトを取得し、取得したオブジェクトに対して削除コマンドを発行する必要があります。これは ORM であるため、実行する SQL を生成するだけでなく、マップされたオブジェクトを管理します。

これが役立つことを願っています。

あまり EF ユーザーではありませんが、次のようなことができます。

var user = db.T_Users.First(e => e.Username == id);
db.T_Users.Delete(user);

ただし、次のようなEFチュートリアルがたくさんあります。

http://www.codeproject.com/Articles/37932/Simple-Sample-with-Entity-Framework

于 2013-07-15T13:13:34.227 に答える