2014-04-14 3 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. Role 만들기 AddOrUpdate을 :

    그래서 당신은 두 단계를 수행해야합니다. 이제 RoleId (또는 PK가 무엇이든)을 추가하거나 업데이트하여 Role을 만들 수 있습니다.

  2. Permissions을 만들고 명시 적으로 RoleId (또는 FK가 무엇이든간에)을 설정합니다. 그런 다음 AddOrUpdatePermissions입니다.
+0

이 경우 사용 권한과 역할은 다 대다 관계이므로 AddOrUpdate를 사용하지 않고 별도로 업데이트해야하지만 여전히 질문에 대답합니다. 감사! – pquest

관련 문제