当我尝试删除记录时,我收到错误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();
我的更大问题是:此问题是否仅影响删除查询,还是会影响其他类型的查询,我还没有碰到这个问题。我已经编写了一个更新查询,它似乎没有遇到此错误。
感谢。
答案 0 :(得分:14)
请参阅此SO帖子:How to delete in linq to sql?
...关于附加,如果您已经拥有主键。如果你没有主键,那么我总是只进行一次获取然后删除,但是,每当我进行提取时,我倾向于存储更新和删除的主键。
它将删除主键,但如果你有,那么只需按照我的方式附加并调用delete。我没有传递DLINQ所需的对象,因为我希望能够根据需要更改它,所以我传入一个不同的User对象,只需从业务类中提取PK并将其放入DAO类中。 / p>
var db = new MeatRequestDataContext(); if (input.UserID > 0) { entity = new User() { UserID = input.UserID }; db.Users.Attach(entity); db.Users.DeleteOnSubmit(entity); }
答案 1 :(得分:5)
对我来说,修复只是首先搜索数据库对象。
var db = new MeatRequestDataContext();
if (input.UserID > 0)
{
var existing = db.Users
.Single(user => user.UserID == input.UserID);
db.Users.DeleteOnSubmit(existing);
}
在我看来,我只能删除已存在的内容,所以我需要首先获取我想要删除的数据库中的项目。这也适用于集合和DeleteAllOnSubmit()。