Код первой ошибки имени таблицы при вставке таблицы «многие ко многим» - PullRequest
0 голосов
/ 07 июля 2019

Вчера я задал вопрос, а потом говорю, что решил проблему.Но сегодня та же ошибка произошла снова.

У меня есть три таблицы dbo.Food, dbo.Menu и dbo.FoodMenu, которые представляют собой таблицу ссылок «многие ко многим», например:

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

Я хочу вставить идентификатор еды и идентификатор меню в FoodMenuТаблица.Мой контекст в порядке, мое отображение в порядке, коды и 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 голосов
/ 15 июля 2019

Я не мог решить эту проблему.Поэтому я создал два сопоставления «один ко многим» для вставки в таблицу FoodMenu.один для еды и один для меню.Решил мою проблему, теперь могу вставить.У меня тоже нет проблем с процессом получения.

My 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);

        }

навигационные свойства Foodи меню классов;

Еда:
public List<FoodMenu> foodFoodMenus { get; set; }

Меню:
public List<FoodMenu> menuFoodMenus { get; set; }

...