質問: GetMappedColumnName(context, x => x.ReportsToID); ``` 私はDbContext内のマップされた列名をどこで見つけるか分かりません。彼らもアクセス可能ですか?
回答: 理論的にはそうです。実際には、簡単なテストでは実行時にこれらの情報を取得できないため、デバッガで表示されますが、使用する必要があるタイプはエンティティフレームワークの内部にあるため、取得できません。 理論。すべてのマッピング情報は、実行時には利用できますが、リフレクションでは使用できません。これらのクラスは、直接使用するようには設計されていない `MetadataWorkspace` クラスのインスタンスに格納されます。このクラスとのあらゆる対話では、必要なデータを取得する方法を見つける前にデバッガで時間を費やす必要があります。このデータはDbContext APIからアクセスできません。 `DbContext` を `ObjectContext` に変換して `MetadataWorkspace` にアクセスする必要があります。 ``` ObjectContext objContext = ((IObjectContextAdapter)dbContext).ObjectContext; GlobalItem storageMapping = objContext.MetadataWorkspace.GetItem("NameOfYourContextClass", DataSpace.CSSpace); ``` `storageMapping` は`内部`の `System.Data.Mapping.StorageEntityContainerMapping` クラスのインスタンスです。私が理解しているように、このクラスは、ストレージと概念モデルの間のMSL =マッピングのランタイム表現でなければなりません。 デバッガを使用すると、インスタンスを調べることができます。また、プロパティと列(かなり深いネストされたもの)間のマッピングに関する情報が得られますので、リフレクションを使用して取得することもできますが、どんな.NETフレームワークのパッチ/修正/アップデートでもアプリケーションが壊れる可能性があります。