2012-05-25 2 views
1

주어진 EF 4.1 DbContext에로드 된 엔티티 목록을 얻는 가장 좋은 방법은 무엇입니까? 주어진 컨텍스트에 대해로드 된 DbEntityEntry.Entity 개체 컬렉션을 찾기 위해 시도가 실패했습니다. DbContext.ChangeTracker.Entries()이 작동하는 것과 유사한 패턴을 사용하여 가능해야하는 것처럼 보입니다.DataContext에서 엔티티 목록 가져 오기

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

을하지만 당신은 일반적으로 Object으로 그들에게 유형을 얻을 것이다 :

답변

3

이렇게하면 문맥에있는 모든 개체를 줄 것이다.

2

여기 테스트를 사용하는 루틴이 있으므로 모든 항목의 값과 상태를 확인할 수 있습니다.

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]); 
     } 
    }