API 查询您的 Entity Framework 上下文模型?

API to query your Entity Framework context's model?

我正在使用 EF 代码优先,我想以编程方式识别哪些属性是导航属性,哪些是外键,哪些是 ID。例如,在这个经典的 Order/Item 示例中;

public class Order
{
    public int Id { get; set; }
    public virtual ICollection<OrderItem> Items { get; set;
}

public class OrderItem
{
    public int Id { get; set; }
    public int OrderId { get; set; }
    public Order Order { get; set; }
    public int ProductCount { get; set; }
}

作为一名程序员,我很清楚发生了什么; OrderItem.OrderId 是我的外键,OrderItem.Order 是一个导航 属性,Order.Items 是那个导航 属性 的逆向。很明显 EF 知道这一点,因为它已经通过模型构建阶段

但是,我希望能够以编程方式执行此操作;所以我希望有一个 API,也许与 Reflection 有相似的感觉,这可能让我问这样的问题;

 var model = CreateModelFor(salesContext);
 var foreignKeys = model.ForeignKeysFor(typeof(Order)); // ["OrderId"]
 var navigationProperties = model.NavigationPropertiesFor(typeof(Order)) // [`Order`]

EF中有这样的东西吗?

您需要下拉到 ObjectContext,然后您可以通过浏览 MetadataWorkspace 获取有关模型的所有信息。 这个API和它背后的整个模型相当可怕(导航属性是最复杂的)。

此线程包含一个可帮助您入门的示例:entity framework check if property is navigation property