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

fre*_*hie 12 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();
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Gen*_*ent 15

请参考这篇SO帖子:如何在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);
 }
Run Code Online (Sandbox Code Playgroud)


ahe*_*rog 6

对我来说,解决方法是先搜索数据库对象。

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

    db.Users.DeleteOnSubmit(existing);
}
Run Code Online (Sandbox Code Playgroud)

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