【问题标题】:Entity framework 6 ObjectMaterialized event and SaveChanges override实体框架 6 ObjectMaterialized 事件和 SaveChanges 覆盖
【发布时间】:2016-12-23 04:17:05
【问题描述】:

我正在使用模型优先方法,并且我有一个抽象类 MyEntity,它有几个带有属性 [NotMapped] 的标志。我所有的实体都继承自 MyEntity。在 ObjectMaterialized 事件处理程序中,我设置了这些标志以指示实体已物化以及与我的应用程序相关的内容。

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

我的问题是:

  1. 这些标志没有映射到数据库列,为什么更改它们会导致实体更新到数据库?

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

  3. 在 base.SaveChanges() 之前重置它们的值后,我还尝试将这些标志属性设置为未更改。虽然这不会导致数据库更新,但我的应用程序行为不正确。这种方法基本上使用实体/属性状态来避免更新数据库。但它可能会导致什么副作用?

【问题讨论】:

    标签: c# entity-framework-6 savechanges


    【解决方案1】:

    最后我通过将实体状态更改为 EntityState.Unchanged 解决了这个问题。它适用于我的应用程序。但是如何改变状态还有一个问题。

    以下方式改变状态导致的问题:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多