linq-to-sql“无法删除尚未附加的实体”

我收到错误Cannot remove an entity that has not been attached. 当我尝试删除记录时。 我已经google了,虽然有很多地方可以找到解决这个问题的解决方案,但建议的修复程序并没有让我更进一步:

 using (MyDataContext TheDC = new MyDataContext()) { TheDC.MyTable.Attach(ARecord); //added this line but doesn't fix it. TheDC.MyTable.DeleteOnSubmit(ARecord); TheDC.SubmitChanges(); 

我的更大问题是:这个问题是否仅影响删除查询,还是影响其他类型的查询,我还没有碰到这个问题。 我写了一个更新查询,似乎没有遇到这个错误。

谢谢。

请参考这篇SOpost: 如何在linq中删除sql?

…关于附加,如果你已经有主键。 如果你没有主键,那么我总是只进行一次获取然后删除,但是,每当我进行提取时,我倾向于存储更新和删除的主键。

它将删除主键,但如果你有,那么只需按照我的方式附加并调用delete。 我没有传递DLINQ所需的对象,因为我希望能够在需要时更改它,所以我传入一个不同的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); } 

对我来说,修复只是首先搜索数据库对象。

 var db = new MeatRequestDataContext(); if (input.UserID > 0) { var existing = db.Users .Single(user => user.UserID == input.UserID); db.Users.DeleteOnSubmit(existing); } 

在我看来,我只能删除已存在的内容,所以我需要先获取我想要删除的数据库中的项目。 这也适用于集合和DeleteAllOnSubmit()。