Как создать ApplicationUser с помощью UserManager в методе Seed веб-приложения ASP.NET MVC 5

Я могу создавать пользователей по-старому:

 var users = new List<ApplicationUser> { 
                        new ApplicationUser{PasswordHash = hasher.HashPassword("TestPass44!"), Email = "[email protected]", UserName = "[email protected]",  SecurityStamp = Guid.NewGuid().ToString()},
                        new ApplicationUser{PasswordHash = hasher.HashPassword("TestPass44!"), Email = "[email protected]", UserName = "[email protected]",  SecurityStamp = Guid.NewGuid().ToString()}
                        };

users.ForEach(user => context.Users.AddOrUpdate(user));

context.SaveChanges();

но я хочу сделать это с помощью ASP.NET MVC 5.1, используя UserManager. Я заглянул, как выглядит метод Register POST в AccountController:

 public async Task<ActionResult> Register(RegisterViewModel model) {
            if (ModelState.IsValid) {
                var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
                IdentityResult result = await UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded) { [...]

поэтому я попытался сделать то же самое:

var user =  new ApplicationUser() { Email = "[email protected]", 
                                    UserName = "[email protected]"};
IdentityResult result =  UserManager.CreateAsync(user, "abcwq12312!P");

но я получаю это:

enter image description here

Также, если я просто набираю UserManager. VS2013, в списке не отображаются какие-либо методы.

Итак, как добавить пользователя таким образом?

EDIT1:

enter image description here

Ответ 1

Хорошо, поэтому для создания пользователя CreateAsync нет необходимости, проблема была где-то еще. Нужно использовать ApplicationUserManager not UserManager (этот ничего не добавляет к базе данных).

 var store = new UserStore<ApplicationUser>(context);
 var manager =  new ApplicationUserManager(store);
 var user = new ApplicationUser() { Email = "[email protected]", UserName = "[email protected]" };
 manager.Create(user, "TestPass44!");

Ответ 2

Я не понимаю отображаемую вами ошибку, если вы не предоставляете пользовательские TUser или TKey, в этом случае:

IdentityResult user = await UserManager.CreateAsync<CustomUser, CustomKey>(user, "abcwq12312!P");

и передавать пользователя как CustomUser вместо ApplicationUser и, возможно, int, если ваш CustomKey является int вместо строки. (CreateAsync может выводить типы, я разместил там, чтобы показать их явно)

Другая проблема, которую я вижу, - это то, что вы не ожидаете задачи, вы также должны добавить ожидание, например:

IdentityResult user = await UserManager.CreateAsync(user, "abcwq12312!P");

Надеюсь, что это поможет.


EDIT:

Для полноты я отправлю полный ответ из этого вопроса, но есть ваш ответ.: Не удалось получить доступ к CreateAsync в Менеджере пользователей.

var result = await UserManager.CreateAsync(user, register.Password);

UserManager в приведенном выше выражении не является Class, поскольку я ожидается. Его свойство типа UserManager<ApplicationUser>.

Итак, в начале просто объявлено свойство

public UserManager<ApplicationUser> UserManager { get; private set; }

И теперь я могу использовать версию Async для создания пользователей. работает следующая инструкция.

var result = await UserManager.CreateAsync(user, register.Password);

Я также буду отмечать возможный дубликат.