2014-12-02 37 views
0

我目前使用的OData V4和希望加入2代表客户和产品:如何加入的OData模型构建器2名的实体

的表如下所示: 账户:ID,姓名,地址,的ColorCode,

产品:身份证,ACCOUNTID

ACCOUNTID在产品表映射到ID字段Account表

在我的建设者的外键我有:

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

的OData使您可以定义实体之间的关系。看起来您正在使用Web API 2.2来为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 $展开;旅行($ select = TripId)

+0

我想你有这个错误的方法。我正试图在产品中获得ColorCode。一个帐户很多产品.. – user1526912 2014-12-04 18:04:58

+0

@ user1526912你是对的。我的理解错了。但决议应该是正确的。它将内联Product对象返回ColorCode。 :) – 2014-12-11 01:59:38

相关问题