如何在Odata模型构建器中连接2个实体

时间:2014-12-02 17:06:38

标签: odata odata-v4

我目前正在使用OData V4并希望加入2个表帐户和产品:

表格如下: 帐户:ID,名称,地址,ColorCode,

产品: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; }

}

1 个答案:

答案 0 :(得分: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类的关系 为你生成模型。

在构建服务之后,在客户端,客户端发送此类请求以获取其帐户的产品和ColorCode:

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

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