Creating Identity user in Seed method of Db Initializer entity-framework entity-framework-6


I have created my data layer with EF 6 code first and I am populating the db through Seed method of EvInitializer class inheriting from DropCreateDatabaseIfModelChanges. The implementation of Seed method is

protected override void Seed(EvContext context)
   //Add other entities using context methods
   ApplicationUserManager manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context));
   var user = new ApplicationUser { Email = "" ,UserName = ""};
   var result = await manager.CreateAsync(user, "Temp_123");//this line gives error. obviously await cannot be used in non- async method and I cannot make Seed async

My question is how I can add a user in Seed method using UserManager class. when I change var result = awit manager.CreateAsync(user, "Temp_123");
var result = manager.CreateAsync(user, "Temp_123").Result; //or .Wait
the application hangs indefinitely

1/29/2016 4:04:22 PM

Accepted Answer

In usermanager has non async methods to create.

var user = new ApplicationUser { Email = "", UserName = "" };
manager.Create(user, "Temp_123");

Same for rolemanager if you want to create "admin" role.

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
roleManager.Create(new Role("admin"));

make the user admin

manager.AddToRole(user.Id, "admin");

Edit: As trailmax commented, Create() extension method comes in with Microsoft.AspNet.Identity namespace so do not forget using Microsoft.AspNet.Identity

12/4/2015 7:44:42 AM

Popular Answer

TMG is correct - there are non-async methods available, and that's the easiest way in this particular case.

In general, however - when you you only have an async version of a function available to you, and you can't change the implementation of the method to be Async - you can create a task and wait for it synchronously.

So - instead of:

IdentityResult result = await manager.CreateAsync(user, "Temp_123");

You can code:

Task<IdentityResult> createTask = manager.CreateAsync(user, "Temp_123");

Once the Wait has finished, the IdentityResult gets returned in


You can also set a timeout on the Wait, like this:

Task<IdentityResult> createTask = manager.CreateAsync(user, "Temp_123");
if (!createTask.Wait(5000)) // Wait up to 5 seconds
   // We've timed out waiting - Do some error handling
else if (!createTask.Result.Succeeded)
  // Creating the user failed - Do some error handling

Related Questions


Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow