C# 带有IdentityDbContext和hasData种子的EFcore创建IdentityRole

C# 带有IdentityDbContext和hasData种子的EFcore创建IdentityRole,c#,.net-core,entity-framework-core,entity-framework-migrations,C#,.net Core,Entity Framework Core,Entity Framework Migrations,我有点眼花缭乱; 我正在迁移中使用dotnet core(2.1)EF。当我仅仅基于上下文创建第一次迁移时,实际上看起来一切正常 所以我有一个上下文,比如: public class DataContext : IdentityDbContext<User, IdentityRole<Guid>, Guid> { public virtual DbSet<Country> Countries { get; set; } public virt

我有点眼花缭乱; 我正在迁移中使用dotnet core(2.1)EF。当我仅仅基于上下文创建第一次迁移时,实际上看起来一切正常

所以我有一个上下文,比如:

public class DataContext : IdentityDbContext<User, IdentityRole<Guid>, Guid>
{

    public virtual DbSet<Country> Countries { get; set; }
    public virtual DbSet<CountryUser> CountryUsers { get; set; }
    //..more stuff

    public DataContext(DbContextOptions options) : base(options)
    { }
}

thnx

据我所知,您正在遵循以下方法:

modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole { Name = "Admin", NormalizedName = "Admin".ToUpper() });

事实上,我把它改为'modelBuilder.Entity().HasData'(新的IdentityRole`……虽然我以为我以前在什么地方做过。但事实上,你指出它然后想要创建一个新的实体,这是完全有道理的。太棒了!thnx@IvanStoev这真的是一个很好的实践,种子身份数据这样吗?我的印象是,你应该始终使用EF身份管理这样做,因为e可能需要填写其他字段,或者这些字段以后可能会更改code@Marie我只能说,这是EF Core开箱即用的通用数据植入支持。它是否应该与Identity一起使用与EF Core无关。OP的链接包含非EF Core植入方式(基本上就是您提到的).但是这个问题是关于
HasData
,因此答案是这样的。您发布的链接涉及需要更多逻辑来播种的数据(“如果您的场景包括以下任何一个,建议使用上一节中描述的自定义初始化逻辑”)我认为身份数据属于这一类,因此它仍然是“EF核心开箱即用”。此外,它可能适用,也可能不适用,但
public class User : IdentityUser<Guid>
{
    public virtual ICollection<CountryUser> CountryUsers { get; set; }
}
modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole { Name = "Admin", NormalizedName = "Admin".ToUpper() });
modelBuilder.Entity<IdentityRole<Guid>>().HasData(
    new IdentityRole<Guid>
    {
        Id = new Guid("pre generated value"),
        Name = "Admin",
        NormalizedName = "Admin".ToUpper()
    }
);