OData和EF 6 Code第一个导航属性问题

时间:2015-11-04 10:19:01

标签: c# entity-framework odata

我先通过EF6 Code创建了下一个表。 PInvoke

我通过向导为EF生成了2个OData控制器。 在评论中我需要添加模型构建器初始化我在评论中做到了

  // Web API configuration and services

        ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
        builder.EntitySet<SchoolChildrens>("SchoolChildrens");
        builder.EntitySet<AttendanceBook>("AttendanceBookSet");
        builder.EntitySet<FoodBudgetIncome>("FoodBudgetIncomeSet");

        builder.EntitySet<MenuOptions>("MenuOptions");
        builder.EntitySet<DishType>("DishTypeSet");
        builder.EntitySet<MenuDetails>("MenuDetailsSet");

        builder.EntitySet<DishType>("DishTypes");
        builder.EntitySet<MenuOptions>("MenuOptionsSet");

但是我收到了错误

  

无法自动绑定实体上的导航属性“DishType”   为源实体集键入“SchoolMeals.Data.MenuOptions”   'MenuOptions'因为有两个或更多匹配的目标实体   集。匹配的实体集是:DishTypeSet,DishTypes。

如果我删除

builder.EntitySet( “DishTypes”);     builder.EntitySet( “MenuOptionsSet”);

我无法使用我的2控制器public class DishTypesController : ODataController

2 个答案:

答案 0 :(得分:1)

问题是由于您将DishType和MenuOption映射到两个单独的实体这一事实引起的: -

builder.EntitySet<DishType>("DishTypes");
builder.EntitySet<DishType>("DishTypeSet");
builder.EntitySet<MenuOption>("MenuOption");
builder.EntitySet<MenuOption>("MenuOptionSet");

答案 1 :(得分:1)

错误消息显示约定模型构建器无法自动将导航属性“'DishType”绑定到实体集,因为有两个实体集。在这种情况下,您应该使用Fluent API将导航属性显式绑定到实体集。您可以在NavigationSourceConfigurationOfTEntityType中使用以下API:

  • HasManyBinding
  • HasRequiredBinding
  • HasOptionBinding ....