EF Code First多次更新

时间:2011-04-08 05:52:28

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

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

所以我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
                                      });

1 个答案:

答案 0 :(得分:1)

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

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

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

第一个是一个简单的例子,其中添加了一个子节点而没有对数据库进行舍入。第二个更复杂但我还没有找到一个很好的方法来清除关系,而不告诉它要删除哪些孩子。

有可能我还没有看过,它是使用您可以从ObjectStateManager获取的RelationshipManager。它包含一些获取相关集合的方法,所以也许你可以以某种方式使用它。