【问题标题】:ASP.NET 5 (MVC6) How to seed usersASP.NET 5 (MVC6) 如何播种用户
【发布时间】:2016-02-28 17:11:16
【问题描述】:

您将如何播种用户?我正在关注他们的文档here,但他们只展示了如何播种由 ApplicationDbContext 直接插入的数据。

在 Account 控制器中,UserManager 是通过 DI 创建的。如何在 Seed 方法中实例化 UserManager?

 public class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        var context = serviceProvider.GetService<ApplicationDbContext>();
        var userManager = serviceProvider.GetService<UserManager<ApplicationUser>>();

然后在 Startup.cs 中的 Configure 方法中:

SeedData.Initialize(app.ApplicationServices);

【问题讨论】:

  • 还要确保在 SeedData 类中包含使用 Microsoft.AspNet.Identity。这就是之前让我失望的原因。

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

在配置方法的 startup.cs 中,您可以添加以下代码来获取 UserManager 并从那里为用户播种。

var userManager = app.ApplicationServices.GetService<UserManager<ApplicationUser>>();

【讨论】:

  • 啊,这就是我要找的。我昨晚一定是超级困或什么的。我更新了问题以显示更完整的示例。谢谢 SynerCoder。
  • 谢谢,不知道在哪里可以找到一个工作的用户管理器,效果很好。
【解决方案2】:

你会在

的行中创建一个类
    public class UserSeed
    {
        private ApplicationDbContext _context;
        private UserManager<ApplicationUser> _mgr;

        public UserSeed(ApplicationDbContext context,UserManager<ApplicationUser> userManager)
        {
            _context = context;
            _mgr = users;
        }

        public void UserSeedData()
        {

            var user = new ApplicationUser { UserName = "foo@foo.com", Email = "foo@foo.com" };

            var result = _mgr.CreateAsync(user,"fooPassword");
......
......

       }
}

在你的 startup.cs 的配置方法中,通过 DI 获取 userSeed

public async void Configure(...., UserSeed userSeedData)

然后在你调用的方法里面

userSeedData.UserSeedData();

不要按原样使用此代码,您可能需要在创建用户之前检查用户是否已经存在。

注意:这个方法会在你的应用程序每次启动时运行一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多