昨天我问了一个问题,后来我说解决了这个问题。但是今天,同样的错误再次发生。
我有三个表dbo.Food
,dbo.Menu
和dbo.FoodMenu
,这是多对多链接表-像这样:
我想在FoodMenu表中插入Food id和Menu id。我的上下文可以,我的映射可以,下面是代码和Exception
。请帮忙。
public JsonResult FoodMenu(FoodMenuViewModel vm)
{
if (ModelState.IsValid)
{
ManyDbContext ctx = new ManyDbContext();
foreach (var item in vm.MenuIds)
{
ctx.FoodMenus.Add(new FoodMenu { FoodID = vm.FoodId, MenuID = item });
ctx.SaveChanges();
}
return Json(new { Result = true, Mesaj = "" });
}
else
{
return Json(new { Result = false, Mesaj = "" });
}
}
例外:
System.Data.Entity.Infrastructure.DbUpdateException:'更新条目时发生错误。有关详细信息,请参见内部异常。'
SqlException:无效的对象名称' dbo.FoodMenus '。
上下文:
public DbSet<Food> Foods { get; set; }
public DbSet<Menu> Menus { get; set; }
public DbSet<FoodMenu> FoodMenus { get; set; }
映射:
modelBuilder.Entity<Food>()
.HasMany<Menu>(s => s.menus)
.WithMany(c => c.foods)
.Map(cs =>
{
cs.MapLeftKey("FoodID");
cs.MapRightKey("MenuID");
cs.ToTable("FoodMenu");
});
我从此错误中了解到:我的表的名称为dbo.FoodMenu
,但异常显示:它的名称必须为dbo.FoodMenus
。但是我不知道为什么。
这是我的FoodMenu class
;
public class FoodMenu
{
[Key, Column(Order = 0)]
public int FoodID { get; set; }
[Key, Column(Order = 1)]
public int MenuID { get; set; }
}
答案 0 :(得分:0)
我无法解决此问题。因此,我创建了两个一对多的映射以插入到FoodMenu表中。一个用于食物,一个用于菜单。解决了我的问题,我现在可以插入。在获取过程中我也没有任何问题。
我的FoodMenu class
;
public class FoodMenu: AuditableEntity, IBaseDomain
{
public int FoodID { get; set; }
public int MenuID { get; set; }
//------------------------------------------------
public Food food { get; set; }
public Menu menu { get; set; }
}
和下面的映射;
public FoodMenuMap()
{
ToTable("FoodMenu");
Property(x => x.FoodID)
.HasColumnName("FoodID")
;
Property(x => x.MenuID)
.HasColumnName("MenuID")
;
//One to Many FluentApi
HasRequired<Food>(s => s.food)
.WithMany(g => g.foodFoodMenus)
.HasForeignKey<int>(s => s.FoodID);
HasRequired<Menu>(s => s.menu)
.WithMany(g => g.menuFoodMenus)
.HasForeignKey<int>(s => s.MenuID);
}
“食物”和“菜单”类的导航属性;
食物:
public List<FoodMenu> foodFoodMenus { get; set; }
菜单:
public List<FoodMenu> menuFoodMenus { get; set; }