我目前正在使用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; }
}
答案 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)