Entity framework 获取DataContext中的实体列表

Entity framework 获取DataContext中的实体列表,entity-framework,entity-framework-4,ef4-code-only,Entity Framework,Entity Framework 4,Ef4 Code Only,获取在给定EF 4.1 DbContext中加载的实体列表的最佳方法是什么?我在尝试查找为给定上下文加载的DbEntityEntry.Entity对象集合时失败。似乎可以使用类似于DbContext.ChangeTracker.Entries()操作方式的模式 这将为您提供上下文中的所有实体: dbContext.ChangeTracker.Entries().Select(e => e.Entity) 但是您将得到它们的类型为generalObject 这将为您提供上下文中的所有实体:

获取在给定EF 4.1 DbContext中加载的实体列表的最佳方法是什么?我在尝试查找为给定上下文加载的
DbEntityEntry.Entity
对象集合时失败。似乎可以使用类似于
DbContext.ChangeTracker.Entries()
操作方式的模式

这将为您提供上下文中的所有实体:

dbContext.ChangeTracker.Entries().Select(e => e.Entity)

但是您将得到它们的类型为general
Object

这将为您提供上下文中的所有实体:

dbContext.ChangeTracker.Entries().Select(e => e.Entity)

但是您将得到它们的类型为general
Object

这里有一个我用来测试的例程,所以我可以检查所有条目的值和状态

public static void ContextDumpTest(DbContext context) {

       Debug.WriteLine("====Begin Context Dump========");
       var dbsetList = context.ChangeTracker.Entries();
        foreach (var dbEntityEntry in dbsetList) {

            Debug.WriteLine(dbEntityEntry.Entity.GetType().Name + " => " + dbEntityEntry.State );
            switch (dbEntityEntry.State) {
                 case EntityState.Detached:
                 case EntityState.Unchanged:
                 case EntityState.Added:
                 case EntityState.Modified:
                    WriteCurrentValues(dbEntityEntry);
                     break;
                case EntityState.Deleted:
                     WriteSomeValues(dbEntityEntry);
                     break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
             Debug.WriteLine("==========End of Entity======");
        }
        Debug.WriteLine("==========End of Context======");
    }

    private static void WriteCurrentValues(DbEntityEntry dbEntityEntry) {
        foreach (var cv in dbEntityEntry.CurrentValues.PropertyNames) {
            Debug.WriteLine(cv + "=" + dbEntityEntry.CurrentValues[cv]);
        }
    }
    private static void WriteSomeValues(DbEntityEntry dbEntityEntry)
    {
        foreach (var cv in dbEntityEntry.OriginalValues.PropertyNames)
        {
            Debug.WriteLine(cv + "=" + dbEntityEntry.OriginalValues[cv]);
        }
    }

这里有一个我用来测试的例程,所以我可以检查所有条目的值和状态

public static void ContextDumpTest(DbContext context) {

       Debug.WriteLine("====Begin Context Dump========");
       var dbsetList = context.ChangeTracker.Entries();
        foreach (var dbEntityEntry in dbsetList) {

            Debug.WriteLine(dbEntityEntry.Entity.GetType().Name + " => " + dbEntityEntry.State );
            switch (dbEntityEntry.State) {
                 case EntityState.Detached:
                 case EntityState.Unchanged:
                 case EntityState.Added:
                 case EntityState.Modified:
                    WriteCurrentValues(dbEntityEntry);
                     break;
                case EntityState.Deleted:
                     WriteSomeValues(dbEntityEntry);
                     break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
             Debug.WriteLine("==========End of Entity======");
        }
        Debug.WriteLine("==========End of Context======");
    }

    private static void WriteCurrentValues(DbEntityEntry dbEntityEntry) {
        foreach (var cv in dbEntityEntry.CurrentValues.PropertyNames) {
            Debug.WriteLine(cv + "=" + dbEntityEntry.CurrentValues[cv]);
        }
    }
    private static void WriteSomeValues(DbEntityEntry dbEntityEntry)
    {
        foreach (var cv in dbEntityEntry.OriginalValues.PropertyNames)
        {
            Debug.WriteLine(cv + "=" + dbEntityEntry.OriginalValues[cv]);
        }
    }