メタデータから、エンティティのプロパティがナビゲーション プロパティであるかどうかを確認する方法はありますか?
プロパティが ICollection を実装しているかどうかを調べることで、プロパティがエンティティ コレクションであるかどうかを判断できます。そこから、それがナビゲーション プロパティであるかどうかを判断できます。
しかし、プロパティがエンティティ コレクションではなく、別のエンティティへの参照のみである場合はどうでしょうか。
メタデータから、エンティティのプロパティがナビゲーション プロパティであるかどうかを確認する方法はありますか?
プロパティが ICollection を実装しているかどうかを調べることで、プロパティがエンティティ コレクションであるかどうかを判断できます。そこから、それがナビゲーション プロパティであるかどうかを判断できます。
しかし、プロパティがエンティティ コレクションではなく、別のエンティティへの参照のみである場合はどうでしょうか。
MetdataWorkspace から O-Space EDM エンティティ タイプを取得でき、NavigationProperties プロパティがあります。以下に例を示します。
var workspace = ((IObjectContextAdapter) ctx).ObjectContext.MetadataWorkspace;
var itemCollection = (ObjectItemCollection)(workspace.GetItemCollection(DataSpace.OSpace));
var entityType = itemCollection.OfType<EntityType>().Single(e => itemCollection.GetClrType(e) == typeof(MyEntity));
foreach(var navigationProperty in entityType.NavigationProperties)
{
Console.WriteLine(navigationProperty.Name);
}