实体框架6对象材料化事件和SAVECHANGES覆盖



我使用的是模型第一种方法,并且我有一个抽象类敏感,该类别的标志很少,属性[notmapping]。我所有的实体都继承了我的意义。在对象材料化事件处理程序中,我设置了这些标志以表明实体是实现的,并且与我的应用程序有关。

在我的savechanges()覆盖中,我致电base.savechanges(),然后重置这些标志。尽管没有更改实际数据,但它似乎导致实体更新到数据库。

我的问题是:

  1. 这些标志未映射到数据库列,为什么更改它们将实体更新到数据库?

  2. 我试图将这些标志放在部分类中,而不是每个实体继承的抽象类。这些标志更改似乎仍导致实体更新到数据库。为什么是?

  3. 我还试图将这些标志属性设置为在base.savechanges()之前重置它们的值后。尽管这不会导致数据库更新,但我的应用程序的行为无法正确。这种方法基本上是在实体/属性状态下进行的,以避免更新数据库。但是它可能导致什么副作用呢?

最后,我通过将实体状态更改为EntityState。它适用于我的应用程序。但是关于如何改变状态仍然存在一个问题。

改变状态的以下方式引起了问题:

dbContext.Entry(entity.Entity).State = EntityState.Unchanged;

我必须使用以下代码更改状态:

ObjectStateEntry state = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager.GetObjectStateEntry(entity.Entity);
state.ChangeState(EntityState.Unchanged);

相关内容

  • 没有找到相关文章

最新更新