如何在 linq to sql 中刪除?
我對 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); }