添加多对多实体框架

本文关键字:框架 实体 添加 | 更新日期: 2023-09-27 18:37:19

我有一个问题:

我有3张桌子:

  1. 用户
  2. 菜单
  3. 用户菜单

UserMenu 包含 IdMenu 和 IdUser。

在我的 DataModel 实体框架 4.0 中,我正在填充我的用户模型,并使用我的表菜单的现有菜单填充 User.Menu(菜单是导航属性)。

我必须保存用户并将每个相关的菜单项保存在用户菜单表中。

我得到以下异常:

ObjectStateManager 不包含具有 引用类型为"SGGED"的对象。模型菜单'。

法典

Users objUser = new Users();
objUser.name = itemUsers.name.Trim();
objUser.email = itemUsers.email.Trim();
objUser.password = Util.HashString("12345");
objUser.effdt = DateTime.Now;
objData.Users.AddObject(objUser);
foreach (var itemMenu in itemUsers.Menu)
{
    objData.ObjectStateManager.ChangeObjectState(itemMenu, EntityState.Unchanged);
}
affRows = objData.SaveChanges();

如何处理此问题的方法是什么?

此致敬意

米尔托姆·卡马拉

添加多对多实体框架

看看这篇关于多对多关系的文章:

与 EF 的多对多关系

问题很可能是itemUsers.Menu中的项目在当前的 objData 上下文中不存在。 这可能是您从另一个上下文对象加载了它们,或者它们已在代码中创建但从未添加到 objData.Menus 集中。