2012-05-25 24 views
1

获取在给定EF 4.1 DbContext中加载的实体列表的最佳方式是什么?我试图找到为给定上下文加载的一组DbEntityEntry.Entity对象,但我一直未能成功。似乎应该可以使用类似DbContext.ChangeTracker.Entries()的模式。在DataContext中获取实体列表

回答

3

这将使你在上下文中的所有实体:

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

,但你会得到他们的类型一般Object

2

这里是我使用的一个例程是Testing,所以我可以检查所有条目的值和状态。

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]); 
     } 
    } 
相关问题