2014-04-14 82 views
1

我在我的種子方法中使用AddOrUpdate來保持我的權限是最新的,但是,在下面的代碼更新現有角色(而不是創建它)的情況下,我創建的任何新權限沒有被添加到角色中。我究竟做錯了什麼?AddOrUpdate不會修改孩子

foreach (KeyValuePair<string, string[]> s in new Dictionary<string, string[]>{ 
       {"Superuser", context.Permissions.Select<Permission, string>(p=>p.Name).ToArray()}, 

      }) 
      { 
       Role r = new Role(); 
       r.Name = s.Key; 
       r.Permissions = new List<Permission>(); 
       foreach (string p in s.Value) 
        r.Permissions.Add(context.Permissions.Where(per => per.Name == p).First()); 

       context.Roles.AddOrUpdate(i => i.Name, r); 
      } 

context.SaveChanges(); 

回答

4

AddOrUpdate只添加或更新主要實體,但不添加或更新它的關係。

所以,你必須做的兩個步驟:

  1. 創建RoleAddOrUpdate它。現在你可以得到RoleId(或任何PK)形成你添加或更新Role
  2. 創建Permissions,並明確設置其RoleId(或任何FK)。然後AddOrUpdatePermissions
+0

在這種情況下,權限和角色具有多對多的關係,所以我將不必使用AddOrUpdate單獨更新它們,但這仍然可以回答問題。謝謝! – pquest