【发布时间】:2014-11-27 23:22:18
【问题描述】:
我使用存储库模式并且为了使事情集中化,我创建了一个 IValidate 接口,我的每个存储库都可以实现该接口。在那我根据他们的状态进行实体验证。到目前为止一切顺利,直到我删除了一个实体。当我尝试从已删除的实体访问属性时,出现异常,该实体不再位于上下文中。
例如:
class A
{
int MyClassBId
B MyClassB
}
如果我添加或更新实体A,我可以轻松访问A.MyClassB。但是,如果我什至在调用 SaveChanges 之前删除(DbSet.Remove)(我的方法当然在保存之前调用此验证),则引用为空。因此,如果我再次尝试访问A.MyClassB,我会得到空引用,但存在“非延迟加载”对象。例如,A.MyClassBId 仍然有 B 的 FK。
我知道 DbSet.Remove 仅将实体标记为删除,没有别的。它是否也将其从上下文中删除?我该如何解决这个问题?调用 DbSet.Remove 并仍然维护对象中的引用,至少在调用 SaveChanges 之前?
谢谢。
【问题讨论】:
标签: c# entity-framework entity-framework-6 repository-pattern