我是非常新的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