2

私はEF4を使用しています。デバッグするときに、データベースにどのような変更が加えられるのか確認したいと思います。たとえば、連絡先のような新しいエンティティを追加すると、.SaveChanges()が実行されたときに追加される連絡先のリストが表示されます。同様に、削除が行われる場合は、削除されるものを確認するのが良いでしょう。エンティティセットとコミットされていない変更を表示するにはどうすればよいですか?

これを行うVS2010には、ビジュアライザーなどのツールがありますか?

ありがとうございます!

答えて

2

これは直接表示されません。最も良い場所は、チェックObjectStateManagerで、各エンティティと独立した関連付けの状態エントリを保持します。エンティティを表す各ObjectStateEntryにはEntityのプロパティがあります。

編集:あなたは、コードでこれらのデータにアクセスしたい場合は

かつての説明が便利です。デバッガで表示したいだけの場合は、ウォッチウィンドウにcontext.ObjectStateManagerを追加し、非公開のメンバーに移動します。 (contextがModelContextするための変数である)

  • _addedEntityStore
  • _deletedEntityStore
  • _modifiedEntityStore
2

私は保留中の変更を通知するために、このコードを使用し、それが役に立つかもしれません:あなたは、のようなフィールドが表示されます

var changes = new[] { EntityState.Added, EntityState.Deleted, EntityState.Modified } 
    .SelectMany(state => context.ObjectStateManager.GetObjectStateEntries(state) 
          .Select(entry => new 
            { 
            NewState = state.ToString(), 
            EntitySetName = entry.EntitySet.Name, 
            Object = ((entry.Entity == null) ? "<n/a>" : entry.Entity.ToString()), 
            IsRelation = entry.EntitySet.Name.StartsWith("FK_"), 
            })) 
      .OrderBy(x => x.IsRelation ? 1 : 0) 
      .Select(x => string.Format("{0} ({1}): {2}", x.NewState, x.EntitySetName, x.Object)) 
      .ToArray(); 

その後、あなたはaggrこの文字列を表示してMessageBoxを表示するか、あなたのアプリケーションのようにユーザーに通知する(例えば、 'Output'のようなテキストボックスに出力する)

+1

これを一行に入れることができますか? –

関連する問題