在ASP.NET WebAPI OData $metadata中缺少反向属性

3
我有两个实体之间非常简单的关系,我试图使用asp.net webapi odata控制器将它们暴露出来,但$metadata似乎有问题。
当我在$metadata上运行jaydatasvcutil.exe时,我得到警告:inverseProperty other side missing。
当我使用breezejs loadNavigationProperty时,我也遇到了类似的错误。
即使是官方示例,我仍然存在这个问题。 http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/working-with-entity-relations 您可以在这里查看$metadata http://sdrv.ms/Z5Klfw
请帮忙。
1个回答

7
当我们生成导航属性时,我们不会重用关系。
例如,假设您有一个简单的模型,
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; }
}

我们���成的导航属性的 $metadata 如下所示,
<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" />

请注意,我们生成了两个关系而不是一个。这样做的原因是很难确定两个导航属性是否表示相同的关系。以Product和Manufacturer为例。

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使用与entityframework相同的EDM模型时。Entityframework需要此信息,因为它将这些关系映射到关联集,这些关联集将变成数据库中的表。
我们选择不这样做的另一个原因是,在OData V4中,这可能会消失。请查看工作草案此处(第23页和第57页将是有意思的)。简而言之,在OData V4中,$metadata中的导航属性将更像这样。
<NavigationProperty Name="Category" Type="Self.Category" Nullable="false" Partner="Products" />

请注意,这里没有关系,也不会有关联集。

1
简而言之:这只是一个警告,你可以忽略它 :) - RaghuRam Nadiminti
另外,我们曾经有一个跟踪错误的网址 - https://aspnetwebstack.codeplex.com/workitem/623 - RaghuRam Nadiminti
好的。谢谢您的解释。我只需要配置提到的js框架。 - Jan Blaha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接