Я пытаюсь выполнить сопоставление «один ко многим», но у меня возникают трудности с сохранением обновлений.
Меню может содержать от 0 до 1 модуля.
Модуль может иметь от 0 до многих меню.
Когда я создаю новый объект меню и сохраняю его, модуль сохраняется в БД, но при обновлении это не так.
Это работает:
var menu = new Menu()
menu.Title = "Menu Title";
menu.Module = repository.GetModule(2);
...
DbContext.SaveChanges()
...
Сохраняет пункт меню с внешним ключом в модуле.
MenuID: 1
ModuleID: 2
Когда я пытаюсь сделать обновление следующим образом:
var menu = repository.GetMenu(1);
menu.Module = repository.GetModule(3);
Edit:
...
DbContext.SaveChanges ()
...
ModuleID в таблице меню не изменяется.
Что не так?
Моя модель:
public class Menu
{
[Key]
public int MenuID { get; set; }
public string Title { get; set; }
public int ModuleID { get; set; } <-- Is this necessary
public virtual Module Module { get; set; }
}
public class Module
{
[Key]
public int ModuleID { get; set; }
public string Name { get; set; }
public virtual ICollection<Menu> Menus { get; set; }
}
Отображение:
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
modelBuilder.Entity<Module>().HasMany<Menu>(m => m.Menus).WithOptional().HasForeignKey(m => m.ModuleID);
}
Чтобы заставить работать мое отображение, мне нужно было добавить ModuleID в класс Menu, но могу ли я отобразить это по-другому?
Edit:
Я использую MySQL
Таблица меню:
int MenuID
varchar название
int ModuleID
Таблица модулей:
int ModuleID
varchar имя