添加多对多实体框架

时间:2012-06-16 02:38:21

标签: c# asp.net entity-framework-4

我有一个问题:

我有3张桌子:

  1. 用户
  2. 菜单
  3. userMenu的
  4. UserMenu包含IdMenu和IdUser。

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

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

    我得到以下异常:

      

    ObjectStateManager不包含带有的ObjectStateEntry   引用'SGGED.Model.Menu'类型的对象。

    代码

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

    处理这个问题的方法是什么?

    最诚挚的问候,

    Miltom Camara

2 个答案:

答案 0 :(得分:0)

看看这篇关于多对多关系的帖子:

Many to Many Relationships with EF

答案 1 :(得分:0)

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