我非常新的
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); }
所以这个失败就出现了这样的消息:“无法删除未附加的实体”.
所以我可以看到为什么前两行在delete方法中失败,因为我创建了一个新对象,而且它们在对象中没有任何有关TableB和TableC的信息.
然而,我看不出为什么最后一行仍然失败,即使不在那里的另外两条线.
就像我以为它会工作的一样,它将需要我的Table A类对象,我传入并查看表中包含的信息.这似乎并非如此.
那么我首先要把信息拿出来,然后做一个查询来得到它,然后删除它,就像在例子中一样?
removeAll()和DeleteAllOnSubmit()之间的区别也是如此.
就像我说的,我是linq到sql的新手,由于时间限制,还没有能够坐下来读一本书.一旦我有更多的时间,我将会阅读一本书.
谢谢
解决方法
您有一个问题有几个问题,但是如果您已经拥有主键,我将从最简单的关于附件开始.如果你没有主键,那么我一直只是做一个提取,然后删除,但是,每当我做一个提取,我倾向于存储更新和删除的主键.
它将删除主键,但是如果你有这样的话,那么只需像下面的那样添加,然后调用delete.我不会传递DLINQ所需的对象,因为我想要更改它,如果我想要的,所以我传递一个不同的用户对象,只是从业务类拉扯PK并将其放入DAO类.
var db = new MeatRequestDataContext(); if (input.UserID > 0) { entity = new User() { UserID = input.UserID }; db.Users.Attach(entity); db.Users.DeleteOnSubmit(entity); }