我是非常新的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的新手,並且由於時間限制,無法坐下來閱讀書籍。一旦我有更多的時間,我可能會通讀一本書。
感謝
我試過這個,但它似乎嘗試使用對象上的所有值來定位記錄。它沒有找到或已更改行錯誤。想法? – drizzie 2015-03-06 21:26:39
@drizzie - 你只把鑰匙放進你的實體實例嗎? – 2015-03-07 01:16:48
是的,我的代碼與您的代碼完全相同。 – drizzie 2015-03-09 13:53:22