首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

无法删除尚未附加的实体-linq中使用反射删除记录出现错误,应该如何解决。

2014-01-28 
下面是我用linq写的一个类,在类中,只使用实体名及要删除的对象来实现删除。 结果出现错误,原因是&ldquo无法

下面是我用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出来的吗------解决方法--------------------------------------------------------