【问题标题】:How to join 2 entities in Odata model builder如何在 Odata 模型构建器中加入 2 个实体
【发布时间】:2014-12-06 04:44:28
【问题描述】:

我目前正在使用 OData V4 并希望加入 2 个表 Account 和 Product:

表格如下: 帐户:ID、姓名、地址、颜色代码,

产品:Id、AccountId

Product表中的AccountId是映射到Account表中Id字段的外键

在我的构建器中,我有:

var ProductType= builder.EntityType<Product>();

当我构建 Product 实体时,我希望从 Account 实体中获取“ColorCode”值。

如何在模型构建器中建立这种关系?

我希望产品类看起来像这样:

public  class Product
{
    public string Id { get; set; }
    public string AccountId { get; set; }
    public string ColorCode { get; set; }

}

【问题讨论】:

    标签: odata odata-v4


    【解决方案1】:

    OData 使您能够定义实体之间的关系。您似乎正在使用 Web API 2.2 for OData V4 来编写您的服务。在这种情况下,您可以像这样在产品和帐户之间建立关系:

    首先,在产品的 POCO 类的定义中,您需要为其帐户添加导航属性:

    public class Product{
        public int Id {get;set;}
        public string AccountId {get;set;}
        public Account Account {get;set;} // define "Account" as a navigation property of Product
    
    public class Account{
        public int Id {get;set;}
        public string Name {get;set;}
        public Address Address {get;set;} // Address may be a complex type
        public int ColorCode {get;set;}
    }
    

    然后在继承自DbContext 的类中,在以下位置添加有关两个实体的信息:

    public virtual DbSet<Product> Products { get; set; }
    public virtual DbSet<Account> Accounts { get; set; }
    

    最后在 WebApiConfig.cs 中,根据需要使用ODataConventionModelBuilder 定义模型。模型构建器将自动识别来自 POCO 类的关系,并 为您生成模型。

    服务建立后,在客户端,客户端发送这样的请求以获取产品和其帐户的颜色代码:

    GET http://host/service/Products?$expand=Account($select=ColorCode)
    

    可以在此处查看示例:http://services.odata.org/v4/(S(xrtmlkz1igiqidututicmb2t))/TripPinServiceRW/People?$expand=Trips($select=TripId)

    【讨论】:

    • 我认为你有这个错误的方式。我正在尝试在 Product 中获取 ColorCode。一个帐户许多产品..
    • @user1526912 你是对的。我的理解是错误的。但分辨率应该是正确的。它将返回 Product 对象内联的 ColorCode。 :)
    猜你喜欢
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    相关资源
    最近更新 更多