5

有没有办法从其元数据中查看实体的属性是否是导航属性?

我可以通过检查它是否实现 ICollection 来确定属性是否是实体集合,并从那里我可以断定它是否是导航属性。

但是如果属性不是实体集合而只是引用另一个实体呢?

4

2 回答 2

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);
}
于 2012-04-20T21:11:24.153 回答
3

您可以使用另一种方法来解决问题。

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();
    }
}
于 2014-01-13T18:02:00.743 回答