下面是我用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;
}
}
}
------解决方法--------------------------------------------------------
“无法删除尚未附加的实体”,你这个实体类反射的时候看看有没有取到
------解决方法--------------------------------------------------------
//这个错误的原因是data没有附加到数据库对象db中//你可以在代码中加入这一句试试db.airports.Attach(data);db.airports.DeleteOnSubmit(data);db.SubmitChanges();------解决方法--------------------------------------------------------感觉你有些脱裤子放屁了。 通过反射去取data的主键的attribute以及表名,然后invoke取值 然后就delete from ... ------解决方法--------------------------------------------------------data是通过同一个db(TowerDataContext)select出来的吗------解决方法--------------------------------------------------------