2017-09-15 106 views
1

我正在用EF Core(2.0.0)创建我的第4个迁移脚本。在那里我想为数据库添加一些角色。使用实体框架核心迁移创建角色

问题是,我不确定如何做到这一点。目前,我有这样的:

protected override void Up(MigrationBuilder migrationBuilder) 
{ 
    // todo: Pass connection string somehow..? 
    var opt = new DbContextOptions<ApplicationContext>(); 
    var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationContext(opt))); 

    //if (!roleManager.RoleExists("ROLE NAME")) 
    //{ 
     // todo: create the role... 
    //} 
} 

但创建RoleManager一样,给了我以下错误:

There is no argument given that corresponds to the required formal parameter 'roleValidators' of 'RoleManager.RoleManager(IRoleStore, IEnumerable>, ILookupNormalizer, IdentityErrorDescriber, ILogger>)'

我不知道如何解决这个问题。我找不到任何有关如何在.NET Core中使用迁移正确执行此操作的信息。

我在这段代码中面临的两个问题:

  • 我试图以某种方式创建的DbContext的一个实例。我应该不能从我的迁移代码中获取DbContext?
  • 像这样实例化RoleManager不起作用,需要解决。

我该如何解决这些问题?

回答

0

Up方法基本上是一个指令文件,告诉EF的数据库迁移者如何生成数据库升级脚本。该方法在脚本生成时执行。做任何数据操作绝对不合适。 EF内核还不支持播种,因此您必须在应用程序启动时添加缺失的角色,例如this