【问题标题】:I'm sure someone has seen this: Cannot remove an entity that has not been attached. with LINQ我确定有人已经看到了:无法删除尚未附加的实体。使用 LINQ
【发布时间】:2012-06-26 09:36:07
【问题描述】:

我使用 LINQ 的场景如下: 我有一个使用以下代码查询表并返回一条记录的方法

private L2SQLData.PatientFile getpatfile(long id)
{
   var db = new HMSDataContext();
   var patfile = 
   (from f in db.PatientFiles.Where(f=> f.Id == id) select   f).FirstOrDefault() ;

   return patfile;
}

然后另一个代码调用上面的方法并获取返回的对象/记录。然后将其从同一个表中删除如下:

L2SQLData.PatientFile patfile = getpatfile(long.Parse(id));

var db = new HMSDataContext();
db.PatientFiles.DeleteOnSubmit(patfile);
db.SubmitChanges();

在运行时,VS2010 发出错误提示:无法删除尚未附加的实体。我究竟做错了什么?有人吗?

【问题讨论】:

    标签: linq-to-sql entity


    【解决方案1】:

    尝试db.PatientFiles.Attach(patfile) 或尝试仅使用一个全局HMSDataContext

    【讨论】:

    • 谢谢 Yuri,我使用了 attach 方法,但出现错误:'尝试附加或添加一个不是新的实体,可能是从另一个 DataContext 加载的。这不受支持。我还试图避免使用全局数据上下文,因为打开的连接即使在不使用时也会保持很长时间,因此可能会减慢 Web 应用程序的速度。
    【解决方案2】:

    我想出了一个解决方案!我查询数据上下文对象以检索与返回的对象具有相同 id 的对象,然后从同一数据上下文中删除。

    var delpatfile = db.PatientFiles.SingleOrDefault(p => p.Id == patfile.Id);
                     db.PatientFiles.DeleteOnSubmit(delpatfile);
                     db.SubmitChanges();
    

    由于它来自相同的数据上下文,它已经被附加。我想这可能不是解决这个问题的唯一方法,所以如果有人仍然有答案,请随时发布。

    谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 2011-09-13
      • 1970-01-01
      相关资源
      最近更新 更多