多对多表插入时出现代码优先表名称错误

时间:2019-07-07 12:08:45

标签: sql-server asp.net-mvc entity-framework insert many-to-many

昨天我问了一个问题,后来我说解决了这个问题。但是今天,同样的错误再次发生。

我有三个表dbo.Fooddbo.Menudbo.FoodMenu,这是多对多链接表-像这样:

  • dbo.Food {ID,FoodName}
  • dbo.Menu {ID,MenuName}
  • dbo.FoodMenu {FoodID,MenuID}

我想在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; }


    }

1 个答案:

答案 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; }