实体框架如何从Datacontext中分离特定类型的所有对象?

时间:2017-05-09 13:22:16

标签: c# entity-framework

目前我正在尝试在我的datacontext.savechanges()方法之前实现代码,该方法将数据上下文中的特定类型的所有对象分离,以便它们不会插入到数据库中。我知道您可以调用dbContext.Entry(entity).State = EntityState.Detached来分离单个实体,但有没有办法从上下文中分离特定类型的所有对象?

编辑:我实现了Mark C建议并编译的内容,但是当我尝试执行代码时,我得到了无效的操作异常:

  

实体类型DbEntityEntry不是当前模型的一部分   上下文。

   foreach (System.Data.Entity.Infrastructure.DbEntityEntry dbEntityEntry in this.dataContext.ChangeTracker.Entries<Customer>())
            {
                if (dbEntityEntry != null && dbEntityEntry.State != System.Data.Entity.EntityState.Modified && dbEntityEntry.State != System.Data.Entity.EntityState.Unchanged)
                {
                    dataContext.Entry(dbEntityEntry).State = System.Data.Entity.EntityState.Detached;
                }
            }

编辑#2:仔细观察后,我犯了一个错误。看来需要在DBEntityEntry上指定实体。通过以下更改,它可以工作:

        foreach (System.Data.Entity.Infrastructure.DbEntityEntry dbEntityEntry in this.dataContext.ChangeTracker.Entries<Customer>())
        {
            if (dbEntityEntry.Entity != null && dbEntityEntry.State != System.Data.Entity.EntityState.Modified && dbEntityEntry.State != System.Data.Entity.EntityState.Unchanged)
            {
                dataContext.Entry(dbEntityEntry.Entity).State = System.Data.Entity.EntityState.Unchanged;
            }
        }

感谢Gert推荐使用EntityState.Unchanged而不是EntityState.Detached。

1 个答案:

答案 0 :(得分:4)

你可以写点像

foreach (DbEntityEntry dbEntityEntry in this.ChangeTracker.Entries())
            {
                if (dbEntityEntry.Entity != null)
                {
                  // Here you can look at typeof and the EntityState
                }
            }

感谢KeithS指出您还可以使用ChangeTracker.Entries()的重载来使用特定的实体类型。

this.ChangeTracker.Entries<SomeEntityEntity>()