理論的にはそうです。実際には、簡単なテストでは実行時にこれらの情報を取得できないため、デバッガで表示されますが、使用する必要があるタイプはエンティティフレームワークの内部にあるため、取得できません。
理論。すべてのマッピング情報は、実行時には利用できますが、リフレクションでは使用できません。これらのクラスは、直接使用するようには設計されていない 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フレームワークのパッチ/修正/アップデートでもアプリケーションが壊れる可能性があります。