2011-05-07 85 views
1

我有2個實體 - 角色和管理員。角色有兩個值 - 搜索管理員和超級管理員。我使用EF Code First模型創建了這些模型。現在,我想的種子值到數據庫和我第一次添加的角色:EF代碼優先 - 播種需要外鍵參考的數據

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)); 
    } 

現在我想用上面創建的同時增加了管理員可以使用的角色之一:

private void SeedAdministrators(PayByPhoneDbContext context) 
    { 
     var administrators = new List<Administrator>{new Administrator {Email = "[email protected]", Name = "Achinth Gurkhi", Password = "hello", Active = true, 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方法。 – 2011-05-07 13:20:38

+0

這是擴展方法。當然你必須使用'使用System.Linq;' – 2011-05-07 13:46:54

+0

!我多麼傻:) – 2011-05-07 13:56:01