2015-06-19 36 views
0

用戶和角色之間存在多對多的關係。我可以輕鬆地將角色添加到多對多表中,但我無法刪除它,它不會給我任何錯誤,但不會刪除要刪除的角色。我嘗試了我發現的一切。這是我的代碼。更新多對多實體框架。無法從多到多的表格中刪除

public User Update(User entity) 
    { 
     using (var context = new EnerSysEntities()) 
     { 

      var user = context.Users.Single(u => u.USER_ID == entity.USER_ID); 

      //All roles in the data base 
      List<Role> roleAlreadyAssigned = GetById(entity.USER_ID).Roles.ToList(); 

      //Roles to remove 
      List<Role> rolesToRemove = 
       roleAlreadyAssigned.Where(x => entity.Roles.All(y => y.ROLE_ID != x.ROLE_ID)).ToList(); 

      //Roles to add 
      List<Role> rolesToAdd = 
       entity.Roles.Where(x => roleAlreadyAssigned.All(y => y.ROLE_ID != x.ROLE_ID)).ToList(); 


      foreach (Role roleToDelete in rolesToRemove.ToList()) 
      { 
       // Remove the roles from rolesToRemove 
       user.Roles.Remove(roleToDelete); 

      } 

      //Add the roles which are not in the list of rolesToAdd 
      foreach (Role rol in rolesToAdd) 
      { 
       var newRole = new Role { ROLE_ID = rol.ROLE_ID }; 
       context.Roles.Attach(newRole); 
       user.Roles.Add(newRole); 

      } 

      context.SaveChanges(); 
      return entity; 
     } 
    } 

我錯過了什麼?

+0

你在user.Roles使用惰性加載?或者在調用'var user = context.Users.Single(u => u.USER_ID == entity.USER_ID)後這是空的;' –

+0

爲什麼你再次獲得'GetById(entity.USER_ID)'用戶?嘗試從用戶對象var user = context.Users.Single(u => u.USER_ID == entity.USER_ID)獲取角色;' –

+0

是的,這是真的我會 –

回答

0

要從Entity中刪除實體,必須先在實體中加載此實體。

與嘗試

var user = context.Users.Include(u => u.Roles).Where(u => u.USER_ID == entity.USER_ID).FirstOrDefault; 

List<Role> rolesToRemove = 
    user.Roles.Where(x => entity.Roles.All(y => y.ROLE_ID != x.ROLE_ID)).ToList(); 

//Roles to add 
List<Role> rolesToAdd = 
    entity.Roles.Where(x => user.Roles.All(y => y.ROLE_ID != x.ROLE_ID)).ToList();