2016-01-20 44 views
2

我正在使用EF代码优先,并且我想以编程方式标识哪些属性是导航属性,哪些是外键,哪些是Ids。例如,在这个经典的Order/Item示例中;查询您的实体框架上下文模型的API?

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

回答