2012-04-20 6 views
3

エンティティのプロパティがナビゲーション・プロパティであるかどうか、そのメタデータから確認する方法はありますか?エンティティ・フレームワークがプロパティがナビゲーション・プロパティであるかどうかをチェックする

プロパティがエンティティコレクションであるかどうかは、ICollectionが実装されているかどうかを調べることで判断でき、そこからナビゲーションプロパティの場合は結論できます。

しかし、プロパティがエンティティコレクションではなく、別のエンティティへの参照のみの場合はどうですか?

+1

各エンティティにAbstractEntityを実装し、(エンティティはAbstractEntity)チェックを行いますか? – Dante

答えて

5

O-Space EDMエンティティタイプは、MetdataWorkspaceから取得でき、NavigationPropertiesプロパティを持ちます。次に例を示します。

+0

これは、このトリックを行うことができるようだが、私は特定のエンティティのsystem.data.metadata.edm.entitytypeをインスタンス化する方法を見つけませんでした。そのコンストラクタはパラメータを持たず、静的メソッドの中には何もありません。 –

+0

これを行う方法を示すコードをいくつか追加しました。この場合のctxはDbContextです。 CodeFirstを使用していない場合は、IObjectContextAdpaterは必要ありません。MetadataWorkspaceプロパティは、(ObjectContextから派生した)コンテキスト上に直接存在します。 – Pawel

+0

どうもありがとう! –

1

もう1つのアプローチを使用して問題を解決できます。

//変数を見つけました。これは、一部のDbContextエンティティインスタンスです。

foreach (var propertyInfo in found.GetType().GetProperties()) 
{ 
    var reference = Context.Entry(found).Member(propertyInfo.Name) as DbReferenceEntry; 
    if(reference != null) 
    reference.Load(); 
} 

このサンプルは役に立ちます。

関連する問題