2011-05-07 3 views
1

역할과 관리자가 2 개 있습니다. 역할에는 Search Admin과 Super Admin의 두 가지 값이 있습니다. 나는 EF Code First 모델을 사용하여 이것을 만들었습니다. 지금은 데이터베이스에 값을 시드 노력하고 내가 먼저 역할을 추가 :EF 코드 첫 번째 - 외래 키 참조가 필요한 시드 데이터

private void SeedAdministrators(PayByPhoneDbContext context) 
    { 
     var administrators = new List<Administrator>{new Administrator {Email = "[email protected]", Name = "Achinth Gurkhi", Password = "hello", Active = true, Role = ? }} 
    } 

방법 :

private static void SeedRoles(PayByPhoneDbContext context) 
    { 
     var roles = new List<Role> {new Role {Name = "Search Administrator"}, new Role {Name = "Super Administrator"}}; 
     roles.ForEach(role => context.Roles.Add(role)); 
    } 

가 지금은 추가 관리자 동안 사용할 수 있도록 위에서 생성 한 역할 중 하나를 사용하려면 여기서 역할을 설정합니까? Role = new Role { Name = "Super Administrator" }이라고 말하거나 SeedRoles 방식으로 삽입 된 역할을 검색해야합니까? 또한 컨텍스트를 사용하여 기존 역할을 검색하려면 어떻게해야합니까?

답변

3

SaveChanges을 컨텍스트에서 실행하기 전에 두 메서드를 모두 호출하면 SeedRoles에서 만든 것과 같은 역할 인스턴스를 사용해야합니다. 그렇지 않으면 동일한 이름의 또 다른 Role이 만들어집니다. 생성 된 역할/역할을 SeedAdministrators (올바른 접근법)으로 전달하거나 context.Roles.Local.Where(r => r.Name = "...")을 쿼리하고 역할을 검색 할 수 있습니다.

+0

context.Roles.Local에는 Where 메서드가 없습니다. –

+0

확장 방법입니다. 'using System.Linq; '를 사용해야합니다. –

+0

물론! 내 바보 같은 방법 :) –

관련 문제