我首先使用的是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
是导航属性的倒数。很明显,英孚知道这一点,因为它已经进入了建模阶段
然而,我希望能够通过编程实现这一点;所以我希望有一个API,可能有类似于反射的感觉,它可能允许我提出以下问题:;
var model = CreateModelFor(salesContext);
var foreignKeys = model.ForeignKeysFor(typeof(Order)); // ["OrderId"]
var navigationProperties = model.NavigationPropertiesFor(typeof(Order)) // [`Order`]
EF中存在这样的东西吗?