我正在嘗試進行一對多映射,但在保存更新時遇到了一些困難。
菜單可以有0到1個模塊。
模塊可以有0到多個菜單。EF CTP5映射更新失敗
當我做一個新的菜單對象並保存它時,模塊被保存到數據庫中,但在更新時不是。
這是工作:
var menu = new Menu()
menu.Title = "Menu Title";
menu.Module = repository.GetModule(2);
...
DbContext.SaveChanges()
...
保存帶有外鍵模塊的菜單項。
菜單ID: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到菜單類,但我可以映射這個不同?
Edit:
I'm using MySQL
菜單表:
INT菜單ID
VARCHAR標題
INT的moduleId
模塊表:
INT的moduleId
VARCHAR名稱
我添加了缺少.SaveChanges()。對不起,我忘了提及我使用MySQL,所以我不能使用SQL Profiler :( – Frets
經過更多的調查後,我發現,當我嘗試保存附加模塊的菜單對象時,沒有任何更新db。但是如果保存沒有附加模塊的菜單對象,所有事情都會在db中更新。 – Frets