2015-11-04 96 views
0

我有通过EF6代码优先创建的下一个表。 modelOData和EF 6代码第一个导航属性问题

我通过向导生成了2个OData控制器到EF。 的意见,我需要添加模型生成初始化我做到了,就像在评论

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

回答

1

错误消息显示,该公约模型构建器不能自动将导航属性“'DishType”绑定到实体集,因为存在两个实体集。在这种情况下,您应该使用Fluent API将导航属性显式绑定到实体集。你可以直接使用这些API遵循NavigationSourceConfigurationOfTEntityType

  • HasManyBinding
  • HasRequiredBinding
  • HasOptionBinding ....
1

问题是由已映射DishType和MenuOption两个独立的实体造成的事实: -

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