读书人

无法删除尚未附加的实体-linq中使用反

发布时间: 2014-01-28 21:16:29 作者: rapoo

下面是我用linq写的一个类,在类中,只使用实体名及要删除的对象来实现删除。
结果出现错误,原因是“无法删除尚未附加的实体”,可能是因为删除前必须附加对象。
但不知道如何解决。
代码中相当于是db.airports.DeleteOnSubmit(data);
db.SubmitChanges();
之后我只要使用TowerBLL.Delete("airports",data)就行了。

public class TowerBLL
{
private TowerDataContext db = new TowerDataContext();
public object Delete(string entityName, object data)
{
using (TransactionScope ts = new TransactionScope())
{
Type t_db = db.GetType();

//获得db中的属性
PropertyInfo pi = t_db.GetProperty(entityName);
object oo = pi.GetValue(db, null);

Type t_entity = pi.GetValue(db, null).GetType();
MethodInfo mi = t_entity.GetMethod("DeleteOnSubmit");

//调用DeleteOnSubmit方法
object ret = mi.Invoke(oo, new object[] { data });//这里出现问题了。

db.SubmitChanges(System.Data.Linq.ConflictMode.FailOnFirstConflict);
return null;
}
}


------解决方法--------------------------------------------------------
“无法删除尚未附加的实体”,你这个实体类反射的时候看看有没有取到
------解决方法--------------------------------------------------------

C# code
//这个错误的原因是data没有附加到数据库对象db中//你可以在代码中加入这一句试试db.airports.Attach(data);db.airports.DeleteOnSubmit(data);db.SubmitChanges();------解决方法--------------------------------------------------------感觉你有些脱裤子放屁了。    通过反射去取data的主键的attribute以及表名,然后invoke取值    然后就delete from ...   ------解决方法--------------------------------------------------------data是通过同一个db(TowerDataContext)select出来的吗------解决方法--------------------------------------------------------        

读书人网 >.NET

热点推荐