【问题标题】:EF Codefirst update many to manyEF Code First 更新多对多
【发布时间】:2011-04-08 05:52:27
【问题描述】:

在多对多情况下,我需要一些帮助来为用户添加角色。

所以我有User 和很多RoleRole 有很多User

我认为我的存储库中当前的Update() 方法不起作用。如何构建允许我删除所有以前的角色并向用户添加新角色的存储库方法?

这是我目前拥有的:

    public User UpdateUser(User user, IEnumerable<Expression<Func<User, object>>> properties)
    {
        if (string.IsNullOrEmpty(user.UserId))
        {
            throw new InvalidOperationException("user does not exist");
        }
        else
        {
            db.Users.Attach(user);
            foreach (var selector in properties)
            {
                string propertyName = Helpers.PropertyToString(selector.Body);
                db.Entry(user).Property(propertyName).IsModified = true;
            }

        }

        db.SaveChanges();
        return user;
    }

这是更新用户的正确方法吗?我假设一切都是分离的。这就是我调用它为用户添加角色的方式:

        User user = new User();
        user.UserId = userId;
        user.Roles = new Domain.Role{ RoleId = 1}; //Assuming there is a role with ID = 1
        userRepo.UpdateUser(user, new List<Expression<Func<User, object>>>
                                      {
                                          u => u.Roles
                                      });

【问题讨论】:

    标签: asp.net-mvc entity-framework asp.net-mvc-3 ef-code-first


    【解决方案1】:

    如果您在分离场景中工作,您可能需要查看对象状态管理器。有关更多信息,请参阅这两个答案。

    Entity Framework Code First - Add Child Entity to Parent by Primary Key

    Save a relation with between two entities an N-N association

    第一个是一个简单的示例,其中添加了一个子节点,而不需要往返 db。第二个更复杂,但我仍然没有找到一种清除关系而不告诉它要删除哪些孩子的好方法。

    有一种可能性我还没有研究过,它是使用可以从 ObjectStateManager 获得的关系管理器。它包含一些获取相关集合的方法,所以也许你可以以某种方式使用它。

    【讨论】:

      猜你喜欢
      • 2013-10-25
      • 2013-02-07
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      相关资源
      最近更新 更多