2009-08-24 14 views
12

私はlinq to sqlの新機能です。実際にレコードを削除する方法がわかりません。 linqでsqlを削除するには?

は、だから私は、彼らが

NorthwindDataContext db = new NorthwindDataContext(); 

Product product = db.Products.Single(p => p.ProductName == "Toy 1"); 

product.UnitPrice == 99; 
product.UnitsInStock = 5; 

db.SubmitChanges(); 

を持っているために、彼らはだから私は、すべてを照会しなければならないの

NorthwindDataContext db = new NorthwindDataContext(); 

var toyProducts = from p in db.Producsts 
       where p.ProductName.Contains("Toy") 
        select p; 

db.Products.RemoveAll(toyProducts); 

db.SubmitChanges(); 

を持って削除

更新のためので

http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

このチュートリアルで見てそのレコードを削除するためにレコードを取得する時間?同様に、最初に更新するレコードを与えてから変更を加える必要があるので、更新でこれを行うことができます

あなたが削除したいものを送信して、それを削除してもいいのですか?なぜあなたはまずそれを入手して、それを削除するよう伝えなければならないのですか?

データベースに2ヒットはありませんか?

また、私は働くことを得ようとしている外部キーの関係があります。だから私はこれを持っている

これは失敗し、このメッセージは "添付されていないエンティティを削除することはできません。

私は新しいオブジェクトを作成し、TableBとTableCに関する情報を持つオブジェクトに何もないので、最初の2行がdeleteメソッドで失敗する理由を知ることができます。

私はしかし、なぜそこに2つの他の行があっても最後の行がまだ失敗するのを見ることができません。

私はそれが動作すると思ったように、渡されたテーブルAクラスのオブジェクトを取り込み、そこに含まれている情報のテーブルを調べます。しかし、そうではないようです。

私は最初に情報を取り出してから取得し、次に例のように削除する必要がありますか?

また、removeAll()とDeleteAllOnSubmit()の違いは何ですか?

私はlinqをSQLに慣れていないと言いました。座って時間制約のために本を読むことができませんでした。一度私は時間があれば、おそらく本を読むでしょう。

おかげで

答えて

13

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

プライマリキーは削除されますが、それがある場合は、以下のように添付して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); 
} 
+0

私はこれを試しましたが、オブジェクトのすべての値を使用してレコードを検索しようとしているようです。行が見つからないか、変更されているとエラーが発生します。アイデア? – drizzie

+0

@drizzie - あなたのエンティティインスタンスにのみキーを入れましたか? –

+0

はい、私のコードはあなたと同じです。 – drizzie

2
 SupportDataDataContext Retrive = new SupportDataDataContext(); 
     // SupportDataDataContext delete = new SupportDataDataContext(); 

     Topic res = Retrive.GetTable<Topic>().Single(t => t.ID == topicID); 


     if (res != null) 
     { 
      Retrive.Topics.DeleteOnSubmit(res); 
      Retrive.SubmitChanges(ConflictMode.ContinueOnConflict); 
     } 
2
Inserted_LINQDataContext db = new Inserted_LINQDataContext(); 
       Item itm = new Item(); 
       int ID = Convert.ToInt32(TextBox1.Text); 
       var DeleteID = from d in db.Items 
           where d.id == ID 
           select d; 
       db.Items.DeleteAllOnSubmit(DeleteID); 
       db.SubmitChanges(); 
       Label2.Text = "Record deleted Successfully."; 
       TextBox1.Text = ""; 

、Linserted_LINQDataContextはidはアイテムのテーブルに列名で、あなたのLINQのDB名です。 itemsはlinqのItemテーブルのエイリアス名です。

関連する問題