エンティティのプロパティがナビゲーション・プロパティであるかどうか、そのメタデータから確認する方法はありますか?エンティティ・フレームワークがプロパティがナビゲーション・プロパティであるかどうかをチェックする
プロパティがエンティティコレクションであるかどうかは、ICollectionが実装されているかどうかを調べることで判断でき、そこからナビゲーションプロパティの場合は結論できます。
しかし、プロパティがエンティティコレクションではなく、別のエンティティへの参照のみの場合はどうですか?
エンティティのプロパティがナビゲーション・プロパティであるかどうか、そのメタデータから確認する方法はありますか?エンティティ・フレームワークがプロパティがナビゲーション・プロパティであるかどうかをチェックする
プロパティがエンティティコレクションであるかどうかは、ICollectionが実装されているかどうかを調べることで判断でき、そこからナビゲーションプロパティの場合は結論できます。
しかし、プロパティがエンティティコレクションではなく、別のエンティティへの参照のみの場合はどうですか?
O-Space EDMエンティティタイプは、MetdataWorkspaceから取得でき、NavigationPropertiesプロパティを持ちます。次に例を示します。
これは、このトリックを行うことができるようだが、私は特定のエンティティのsystem.data.metadata.edm.entitytypeをインスタンス化する方法を見つけませんでした。そのコンストラクタはパラメータを持たず、静的メソッドの中には何もありません。 –
これを行う方法を示すコードをいくつか追加しました。この場合のctxはDbContextです。 CodeFirstを使用していない場合は、IObjectContextAdpaterは必要ありません。MetadataWorkspaceプロパティは、(ObjectContextから派生した)コンテキスト上に直接存在します。 – Pawel
どうもありがとう! –
もう1つのアプローチを使用して問題を解決できます。
//変数を見つけました。これは、一部のDbContextエンティティインスタンスです。
foreach (var propertyInfo in found.GetType().GetProperties())
{
var reference = Context.Entry(found).Member(propertyInfo.Name) as DbReferenceEntry;
if(reference != null)
reference.Load();
}
このサンプルは役に立ちます。
各エンティティにAbstractEntityを実装し、(エンティティはAbstractEntity)チェックを行いますか? – Dante