2

我需要一些幫助,在許多情況下向用戶添加角色。EF Codefirst更新多對多

所以我有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

如果你在一個分離的情況是工作,你可能要考慮的對象狀態管理。有關更多信息,請參閱這兩個答案。

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

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

第一個是一個簡單的例子,其中單個子而不roundtriping分貝加入。第二個是更復雜的,但我仍然沒有找到一個很好的方式來清除關係,而不告訴它刪除哪些孩子。

有一種可能性,我還沒有看過,它是使用可以從ObjectStateManager獲得的RelationshipManager。它包含一些方法來獲得相關的集合,所以也許你可以以某種方式使用它。