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

时间:2011-12-23 02:48:50

标签: c# linq 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();

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

感谢。

2 个答案:

答案 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()。