私はこれに対する答えを何年も探してきました。同様の投稿をたくさん見てきましたが、どれも「XML から直接マッピング データを読み取る必要がある」と回答されているようですが、その方法の例が見当たりません。
私はEF 4.1、データベースファースト、Dbcontextを使用しています。カスタム コンテキストで SaveChanges をオーバーライドすることによって行われる監査プロセスを実装しようとしています。状態マネージャーに問い合わせて、変更されたレコードなどを引き戻します。すべての標準的なものと多くの良い例があります。
ただし、列名が変更され、列が属するテーブル名を持つ、データベース内の単一の監査テーブルに書き込みたいと考えています。現在、列レコードのエンティティ プロパティ名とエンティティ タイプをテーブル レコードに書き出すだけです。これは機能しますが、概念的な表現ではなく、マップされた列/テーブル名を書く必要があるため、厳密には正しくありません。これまでのところ、すべてのエンティティは正確なマッピングを使用しています。つまり、データベース名と同じ名前です。ただし、ある日、開発者が新しいテーブルからエンティティを作成し、マッピングに別の名前を指定した場合、私の監査は正しくありません。たとえば、存在しない列名の監査の詳細があります。また、エンティティを複数のテーブルにマップできることも知っています。だから、これは私が理想的にやりたいことです:
エンティティ プロパティ レベルで、データベースからの列名とそれが属するテーブル名を見つけたい (完全なスキーマを含む - つまり、テーブル MySchema.MyTable の場合、監査テーブル MySchema.MyTable に書き込みたいだけでなく、マイテーブル)。このプロセスは、開発者がマッピング名を編集したり、複数のテーブルからエンティティを作成したりするなどの監査プロセスを保護します。
すべての例では、データ ストア (SSpace) から概念ストア (CSpace) への関係情報を保持する CSSpace データセットを使用する必要があると述べています。しかし、これは内部で使用されており、metadataworkspace API からはアクセスできないようです。代わりに、CSSpace の XML を直接読み取る必要がありますか? もしそうなら、このファイルはどこにありますか (アセンブリに埋め込まれていますか?)、どうすればそれを読むことができますか? 私がやりたいことは非常に基本的で明白な要件だと思いますが、それを行うのはとても難しいようです。
どんな助けでも大歓迎です!