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
我正在使用 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