2011-12-23 13 views
8

レコードを削除しようとするとエラーCannot remove an entity that has not been attached.が表示されます。私の周りGoogleで検索してきたし、この問題を解決するためのソリューションを見つけるための場所がたくさんありますが、修正案はさらに私を取得していません:linq-to-sql「接続されていないエンティティを削除できません」

using (MyDataContext TheDC = new MyDataContext()) 
{ 
    TheDC.MyTable.Attach(ARecord); //added this line but doesn't fix it. 
    TheDC.MyTable.DeleteOnSubmit(ARecord); 
    TheDC.SubmitChanges(); 

を私の大きな問題はこれです:この問題は、削除クエリに影響を与えませんそれは他の種類のクエリにも影響を及ぼしますか、私はまだこの問題にぶつかりませんでした。私は更新クエリを書いており、このエラーに遭遇することなく動作するようです。

ありがとうございました。

答えて

11

は、このSOポストを参照してください:How to delete in linq to sql?

...あなたはすでに主キーを持っている場合は、取り付けについて。主キーを持っていなければ、フェッチしてから削除するだけですが、フェッチするたびに私は更新と削除のために主キーを保存する傾向があります。

プライマリキーは削除されますが、それがある場合は、以下のように添付してdeleteを呼び出します。私が望むならば変更できるように、DLINQに必要なオブジェクトを渡しません。別のUserオブジェクトを渡し、ビジネスクラスからPKを取り出してDAOクラスに配置します。私にとって

var db = new MeatRequestDataContext();    
if (input.UserID > 0) 
{ 
    entity = new User() 
    { 
     UserID = input.UserID 
    }; 
    db.Users.Attach(entity); 
    db.Users.DeleteOnSubmit(entity); 
} 
+3

+1 MeatRequestDataContext() – bytebender

4

、修正はちょうど最初のデータベース・オブジェクトを探していました。私の心の中で

var db = new MeatRequestDataContext(); 
if (input.UserID > 0) 
{ 
    var existing = db.Users 
     .Single(user => user.UserID == input.UserID); 

    db.Users.DeleteOnSubmit(existing); 
} 

、私はすでにそこにあったものを削除することができたので、私は私が最初に削除したいデータベース内のアイテムを取りに行く必要がありました。これは、コレクションとDeleteAllOnSubmit()でも機能します。

関連する問題