代码之家  ›  专栏  ›  技术社区  ›  Steve Cooper

API来查询实体框架上下文的模型?

  •  2
  • Steve Cooper  · 技术社区  · 9 年前

    我首先使用的是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中存在这样的东西吗?

    1 回复  |  直到 9 年前
        1
  •  2
  •   Community CDub    8 年前

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

    此线程包含一个示例,将帮助您开始: entity framework check if property is navigation property

    推荐文章