微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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" />

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐