用于查询实体框架上下文模型的 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 中存在这样的事情吗?
您需要下拉到 ObjectContext,然后可以通过探索 MetadataWorkspace 来获取有关模型的所有信息。这个 API 及其背后的整个模型非常可怕(导航属性是最复杂的)。
此线程包含一个示例,可帮助您入门:实体框架检查属性是否为导航属性