gpt4 book ai didi

c# - EF CTP5 映射更新失败

转载 作者:行者123 更新时间:2023-11-29 14:53:43 25 4
gpt4 key购买 nike

我正在尝试进行一对多映射,但在保存更新方面遇到一些困难。
菜单可以有 0 到 1 个模块。
模块可以有 0 到多个菜单。

当我创建一个新的菜单对象并保存它时,该模块会保存到数据库中,但更新时不会。

这正在工作:

var menu = new Menu()
menu.Title = "Menu Title";
menu.Module = repository.GetModule(2);

...
DbContext.SaveChanges()
...

将带有外键的菜单项保存到模块中。
菜单ID:1
模块ID: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:

I'm using MySQL

菜单表:
int 菜单ID
varchar 标题
int 模块ID

模块表:
int 模块ID
varchar 名称

最佳答案

在你的第二个示例中,我假设你将 .SaveChanges() 留在了代码片段之外?

您的类结构和映射看起来正确,您是否连接了 SQL Profiler 以查看第二个示例 .SaveChanges() 正在执行什么命令?

关于c# - EF CTP5 映射更新失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5148008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com