前言
最近在写C#程序,要求通过EF三层架构实现对数据库的增、删、改、查等操作。增加、修改都写得比较丝滑,没啥大问题。直到我开始写删除操作,跑起来VS给我报错......
问题
这是啥意思?找不到该对象?
我第一反应就是是不是参数没传进去,我就往前扒拉我的函数,欸,没问题啊,参数传得好好的,怎么就找不到对象呢?
解决方案
查阅了多方资料之后,我找到了解决方法。
可能是因为EF三层架构的原因,会出现这个问题。ObjectStateManager是维护实体类型实例和关系实例的对象状态和标识管理。实际上没有在ObjectStateManager中找到是因为没有找到删除的状态。所以这里我们先要将要删除的目标对象的状态设置为删除,就能顺利完成啦!
代码
原来有问题的代码:
public int Delete(db2 db2) //删除记录
{
myDbContext = new MydbContext();
myDbContext.Set<db2>().Remove(db2); //报错段
int n = myDbContext.SaveChanges();
myDbContext.Dispose();
return n;
}
修改之后:
public int Delete(db2 db2) //删除记录
{
myDbContext = new MydbContext();
//设置为删除状态
myDbContext.Entry(db2).State = EntityState.Deleted;
myDbContext.Set<db2>().Remove(db2);
int n = myDbContext.SaveChanges();
myDbContext.Dispose();
return n;
}