Linq to sql I';我确信有人看到了这一点:无法删除尚未附加的实体。与林克

Linq to sql I';我确信有人看到了这一点:无法删除尚未附加的实体。与林克,linq-to-sql,entity,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;

我使用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会发出错误:无法删除尚未连接的实体。我做错了什么?有人吗?

试试
db.PatientFiles.Attach(patfile)
或者试着只使用一个globalyHMSDataContext

试试
db.PatientFiles.Attach(patfile)
或者试着只使用一个globalyHMSDataContext

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

var delpatfile = db.PatientFiles.SingleOrDefault(p => p.Id == patfile.Id);
                 db.PatientFiles.DeleteOnSubmit(delpatfile);
                 db.SubmitChanges();
因为它来自相同的数据上下文,所以已经附加了它。我想这可能不是解决这个问题的唯一方法,所以如果有人仍然有答案,请随时发布


谢谢。

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

var delpatfile = db.PatientFiles.SingleOrDefault(p => p.Id == patfile.Id);
                 db.PatientFiles.DeleteOnSubmit(delpatfile);
                 db.SubmitChanges();
因为它来自相同的数据上下文,所以已经附加了它。我想这可能不是解决这个问题的唯一方法,所以如果有人仍然有答案,请随时发布


谢谢。

谢谢Yuri,我使用了attach方法,但我遇到了一个错误:“试图附加或添加一个不是新的实体,可能是从另一个DataContext加载的。”。这是不支持的。我还试图避免使用全局datacontext,因为即使在不使用的情况下,打开的连接也会持续很长时间,这会降低web应用程序的速度。感谢Yuri,我使用了attach方法,但我遇到了一个错误:“尝试附加或添加一个非新实体,可能是从另一个DataContext加载的。这是不受支持的。我还试图避免使用全局datacontext,因为即使在不使用的情况下,打开的连接也会持续很长时间,这会降低web应用程序的速度。