我使用的是模型第一种方法,并且我有一个抽象类敏感,该类别的标志很少,属性[notmapping]。我所有的实体都继承了我的意义。在对象材料化事件处理程序中,我设置了这些标志以表明实体是实现的,并且与我的应用程序有关。
在我的savechanges()覆盖中,我致电base.savechanges(),然后重置这些标志。尽管没有更改实际数据,但它似乎导致实体更新到数据库。
我的问题是:
-
这些标志未映射到数据库列,为什么更改它们将实体更新到数据库?
-
我试图将这些标志放在部分类中,而不是每个实体继承的抽象类。这些标志更改似乎仍导致实体更新到数据库。为什么是?
-
我还试图将这些标志属性设置为在base.savechanges()之前重置它们的值后。尽管这不会导致数据库更新,但我的应用程序的行为无法正确。这种方法基本上是在实体/属性状态下进行的,以避免更新数据库。但是它可能导致什么副作用呢?
最后,我通过将实体状态更改为EntityState。它适用于我的应用程序。但是关于如何改变状态仍然存在一个问题。
改变状态的以下方式引起了问题:
dbContext.Entry(entity.Entity).State = EntityState.Unchanged;
我必须使用以下代码更改状态:
ObjectStateEntry state = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager.GetObjectStateEntry(entity.Entity);
state.ChangeState(EntityState.Unchanged);