我确定有人看到了这个:无法移除未附加的实体。与LINQ

时间:2012-06-26 09:36:07

标签: linq-to-sql entity

我使用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会尖叫并显示错误:无法删除尚未连接的实体。我究竟做错了什么?任何人吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

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

感谢。