2011-05-07 48 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