用于查询实体框架上下文模型的 API

本文关键字:模型 API 上下文 框架 查询 实体 用于 | 更新日期: 2023-09-27 18:31:07

我首先使用 EF 代码,我想以编程方式识别哪些属性是导航属性,哪些是外键,哪些是 Id。例如,在这个经典的订单/项目示例中;

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 中存在这样的事情吗?

用于查询实体框架上下文模型的 API

您需要下拉到 ObjectContext,然后可以通过探索 MetadataWorkspace 来获取有关模型的所有信息。这个 API 及其背后的整个模型非常可怕(导航属性是最复杂的)。

此线程包含一个示例,可帮助您入门:实体框架检查属性是否为导航属性