2009-08-24 16 views
12

我是非常新的linq到SQL,我不知道如何實際刪除記錄。如何在linq中刪除sql?

所以,我一直在研究這個教程

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

所以對於更新他們

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(); 

所以我必須查詢每時間,以獲取記錄以刪除該記錄?就像我可以看到這樣做與更新,因爲你需要給它一個記錄,先更新,然後進行更改,所以我理解查詢部分,但不刪除。

就像你不能只發送你想要刪除的東西,它會刪除它並刪除它?爲什麼你必須先得到它,然後告訴它被刪除?

這是不是在數據庫上2擊?

另外我有外鍵關係,我試圖去工作。所以我有這個

public ViewResult(string param1, string param2) 
{ 
    Table A = new Table A 
    A.Field1 = param1; 
    A.Field2 = param2; 

    Delete(A); 
} 

private void Delete(Table A) 
{ 
    DbContext.A.DeleteAllOnsubmit(A.TableB); 
    DbContext.A.DeleteAllOnSubmit(A.TableC); 
    DbContext.A.DeleteOnSubmit(A); 

} 

所以這個失敗它會出現這個消息「無法刪除未連接的實體」。

因此,我可以看到爲什麼前兩行會在刪除方法失敗,因爲我做了一個新的對象,它們沒有任何關於TableB和TableC的任何信息的對象。

但是,我不明白爲什麼最後一行仍然失敗,即使其他2行不在那裏。

就像我認爲它會工作,它將需要我的表一個類對象,我傳入並查看錶中的信息包含在其中。但似乎並非如此。

那麼我首先必須拿出信息,然後做一個查詢來獲得它,然後刪除它,就像在這個例子中一樣?

removeAll()和DeleteAllOnSubmit()之間有什麼區別。

就像我說過的,我是linq to 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 2015-03-06 21:26:39

+0

@drizzie - 你只把鑰匙放進你的實體實例嗎? – 2015-03-07 01:16:48

+0

是的,我的代碼與您的代碼完全相同。 – drizzie 2015-03-09 13:53:22

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是你的Linq DB姓名,身份證是在項目表中的列名。 Items是linq中Item表的別名。