有没有办法从元数据中查看实体的属性是否为导航属性?
我可以通过检查属性是否实现ICollection来确定属性是否是实体集合,从那里我可以断定它是否是导航属性。
但是,如果属性不是实体集合而只是引用另一个实体呢?
答案 0 :(得分:6)
您可以从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);
}
答案 1 :(得分:2)
您可以使用另一种方法来解决问题。
Obs:found
变量是一些DbContext实体实例;
foreach (var propertyInfo in found.GetType().GetProperties())
{
var reference = Context.Entry(found).Member(propertyInfo.Name) as DbReferenceEntry;
if (reference != null)
{
reference.Load();
}
}