c# - Entity Framework 如何从 Datacontext 中分离所有特定类型的对象?

标签 c# entity-framework

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

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

The entity type DbEntityEntry is not part of the model for the current context.

   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。

最佳答案

你可以这样写

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>()

关于c# - Entity Framework 如何从 Datacontext 中分离所有特定类型的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43871074/

相关文章:

c# - string.ToLower 和 TextInfo.ToLower 之间的区别

c# - 如何在 Visual Studio 中使用堆栈跟踪进行调试?

c# - ToListAsync() in a DbContext using statement : "The ObjectContext disposed", 如何处理?

asp.net - 在 async/await 之前的过去,WebAPI 请求是如何取消的?

c# - 多重性在角色 1 中无效..* 或 EF 奇怪的迁移代码或如何在一个数据库中存储两组完全不同的用户

c# - 是否可以使用不同的 key 对签署已签名的 .net dll?

c# - 使用数据注释进行验证

c# - 使用 EF6 的 SqlServer 数据库镜像故障转移失败原理仅镜像

c# - 正确使用表中列值中的列表?

entity-framework - EF Code First验证唯一属性?