1

特定のEF4.1DbContextにロードされているエンティティのリストを取得するための最良の方法は何でしょうか?DbEntityEntry.Entity特定のコンテキストでロードされたオブジェクトのコレクションを見つける試みに失敗しました。動作と同様のパターンで可能になるはずDbContext.ChangeTracker.Entries()です。

4

2 に答える 2

3

これにより、コンテキスト内のすべてのエンティティが提供されます。

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

しかし、あなたはそれらを一般的なタイプとして取得しますObject

于 2012-05-26T15:14:04.257 に答える
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]);
        }
    }
于 2013-04-25T11:10:41.637 に答える