Asp.net

如何在 linq to sql 中刪除?

  • January 8, 2020

我對 linq to 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);

}

所以這失敗了,它會出現這條消息“無法刪除尚未附加的實體”。

所以我可以看到為什麼前兩行在 delete 方法中會失敗,因為我創建了一個新對象,並且它們在對像中沒有任何關於 TableB 和 TableC 的資訊。

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

就像我認為它會工作的方式一樣,它將獲取我傳入的表 A 類對象,並通過表查看其中包含的資訊。但似乎並非如此。

那麼我是否必須首先取出資訊然後進行查詢以獲取它然後刪除它,就像在範例中一樣?

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

就像我說的那樣,我是 linq to sql 的新手,由於時間限制,我無法坐下來閱讀有關它的書。一旦我有更多的時間,我可能會讀一本書。

謝謝

您的一個問題中有幾個問題,但如果您已經擁有主鍵,我將從最簡單的關於附加的問題開始。如果您沒有主鍵,那麼我總是先獲取然後刪除,但是,每當我進行獲取時,我傾向於儲存主鍵以進行更新和刪除。

它將從主鍵中刪除,但如果你有它,那麼就像我在下面做的那樣附加並呼叫刪除。我不傳遞 LINQ 所需的對象,因為我希望能夠在需要時更改它,所以我傳遞了一個不同的 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);
}

引用自:https://stackoverflow.com/questions/1319981