EF Code First - 需要外键引用的种子数据

时间:2011-05-07 12:58:56

标签: .net ef-code-first entity-framework-4.1

我有2个实体 - 角色和管理员。角色有两个值 - 搜索管理员和超级管理员。我使用EF Code First模型创建了这些。现在我尝试将值赋予数据库并首先添加角色:

    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 = "a@a.com", Name = "Achinth Gurkhi", Password = "hello", Active = true, Role = ? }}
    }

如何在此处设置角色?我应该说Role = new Role { Name = "Super Administrator" }还是搜索SeedRoles方法插入的角色?另外,如何使用上下文搜索现有角色?

1 个答案:

答案 0 :(得分:3)

如果在对上下文执行SaveChanges之前调用了这两个方法,则必须使用在SeedRoles中创建的相同角色实例,否则将创建另一个具有相同名称的Role。您必须将创建的角色/角色传递给SeedAdministrators(这是正确的方法),或者您可以尝试查询context.Roles.Local.Where(r => r.Name = "...")并搜索角色。