在做ling操作时遇到如下错误:
Cannot remove an entity that has not been attached
我的错误之处在于在同一个方法中,查询和删除使用不同的Data context。
错误代码如下:
protected DataClassesDataContext DB
{
get
{
return new DataClassesDataContext();
}
}
private void DeleteOGU(int Id)
{
var ogu = DB.OGUs.FirstOrDefault(x => x.OGU_SysID == Id);
DB.OGUs.DeleteOnSubmit(ogu);
DB.SubmitChanges();
BindData();
}
{
get
{
return new DataClassesDataContext();
}
}
private void DeleteOGU(int Id)
{
var ogu = DB.OGUs.FirstOrDefault(x => x.OGU_SysID == Id);
DB.OGUs.DeleteOnSubmit(ogu);
DB.SubmitChanges();
BindData();
}
在Delete方法中,DB每次都是一个新的实例,所以DeleteOnSubmit的参数ogu其实和方法所在的data context并不在同一个对象中,也就出现如标题所示的错误。
现将DB属性去掉,把它移入Delete方法中。
private void DeleteOGU(int Id)
{
var DB = new DataClassesDataContext();
var ogu = DB.OGUs.FirstOrDefault(x => x.OGU_SysID == Id);
DB.OGUs.DeleteOnSubmit(ogu);
DB.SubmitChanges();
BindData();
}
{
var DB = new DataClassesDataContext();
var ogu = DB.OGUs.FirstOrDefault(x => x.OGU_SysID == Id);
DB.OGUs.DeleteOnSubmit(ogu);
DB.SubmitChanges();
BindData();
}
此时方法中的所有DB都指向同一个对象,错误自然被排除。
转自:http://blog.csdn.net/duwa789/archive/2010/05/06/5563714.aspx