asp.net-web-api – 在asp.net webapi odata $metadata中缺少反向属性

在两个实体之间有非常简单的关系,我试图用asp.net webapi odata控制器公开它们,但似乎$元数据有问题.

当我在$元数据上运行jaydatasvcutil.exe时,我收到警告:inverseProperty其他方面缺失.

当我使用breezejs loadNavigationProperty时,我得到类似的错误.

即使有官方的例子我也有问题.
http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/working-with-entity-relations

你可以在这里观察$元数据http://sdrv.ms/Z5Klfw

请帮忙.

解决方法

当我们生成导航属性时,我们不重用这些关系.

例如,假设你有简单的模型,

public class Product
{
    public int Id { get; set; }
    public supplier supplier { get; set; }
}
public class supplier
{
    public int Id { get; set; }
    public Product[] Products { get; set; }
}

我们生成的导航属性的$元数据如下所示,

<NavigationProperty Name="supplier" Relationship="ProductsService.Models.ProductsService_Models_Product_supplier_ProductsService_Models_supplier_supplierPartner" ToRole="supplier" Fromrole="supplierPartner" />

<NavigationProperty Name="Products" Relationship="ProductsService.Models.ProductsService_Models_supplier_Products_ProductsService_Models_Product_ProductsPartner" ToRole="Products" Fromrole="ProductsPartner" />

请注意,我们正在生成两个关系,而不是一个.我们这样做的原因是,弄清楚两个导航属性是否代表相同的关系是一个难题.以产品和制造商为例.

public class Manufacturer
{
    public int Id { get; set; }
    public Product[] RawMaterials { get; set; }
    public Product[] Produces { get; set; }
}
public class Product
{
    public int Id { get; set; }
    public Manufacturer[] Producers { get; set; }
    public Manufacturer[] Consumers { get; set; }
}

要弄清楚Maufacturer.RawMaterials和Product.Consumers应该共享相同的关系并且Manufaturer.Produces和Product.Producers应该共享相同的关系并非易事.我们选择不这样做是因为我们所知道的客户并没有从这些信息中获取太多信息.

所有这一切都发生,因为OData使用与实体框架相同的EDM模型. Entityframework需要此信息,因为它将这些关系映射到将成为数据库中的表的关联集.

我们选择不这样做的另一个原因是这可能会在OData V4中消失.查看工作草案here(第23页和第57页将有意义).简而言之,OData V4中$Metadata中的导航属性看起来更像这样,

<NavigationProperty Name="Category" Type="Self.Category" Nullable="false" Partner="Products" />

请注意,没有关系,也没有关联集.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....