I have this seeding class which keeps failing to insert a record in the users table,
I believe that using CreateAsync is not proper since the method is not async the user manager does not seed the record. so I tried to seed manually using hashed password but I can't login. I am posting both methods
Why the user info is not inserted on the database initialization? 1. Using UserManager CreateAsync
public void SeedData()
{
using (var serviceScope = scopeFactory.CreateScope())
{
using (var context = serviceScope.ServiceProvider.GetService<ArtCoreDbContext>())
{
if (!context.ApplicationUser.Any())
{
var user = new ApplicationUser
{
CityId = context.Cities.Where(g => g.Name == "Abu Nusair").SingleOrDefault().Id,
CountryId = context.Countries.Where(g => g.Name == "Jordan").SingleOrDefault().Id,
Email = "maizer85@hotmail.com",
FirstName = "Zaid",
GenderId = context.Genders.Where(g => g.Name == "Female").SingleOrDefault().Id,
IsActive = true,
LastName = "Abu Maizar",
MaritalStatusId = context.MaritalStatus.Where(g => g.Name == "Single").SingleOrDefault().Id,
NationalityId = context.Nationalities.Where(g => g.Name == "Jordanian").SingleOrDefault().Id,
OccupationId = context.Occupations.Where(g => g.Name == "MD").SingleOrDefault().Id,
PersonalPhotoUrl = null,
PhoneNumber = "4243244990",
PhoneNumberConfirmed = false,
PostalCode = 91335,
SocialSecurityNo = "AABBCC",
StateId = context.States.Where(g => g.Name == "Amman").SingleOrDefault().Id,
StatusId = context.Statuses.Where(g => g.Name == "Active").SingleOrDefault().Id,
UserName = "Zaid",
};
userManager.CreateAsync(user, "String@string85");
context.SaveChanges();
}
}
}
}
2. Manual Seed,
public void SeedData()
{
using (var serviceScope = scopeFactory.CreateScope())
{
using (var context = serviceScope.ServiceProvider.GetService<ArtCoreDbContext>())
{
if (!context.ApplicationUser.Any())
{
context.ApplicationUser.AddRange(
new ApplicationUser
{
Id = Guid.NewGuid().ToString("N"),
AccessFailedCount = 0,
AdminLevel = "LA",
ApartmentNo = 0,
CityId = context.Cities.Where(g => g.Name == "Abu Nusair").SingleOrDefault().Id,
ConcurrencyStamp = Guid.NewGuid().ToString("N"),
ContactAddress = "USA",
ContactCountry = "USA",
CountryId = context.Countries.Where(g => g.Name == "Jordan").SingleOrDefault().Id,
DateCreated = DateTime.UtcNow,
Email = "maizer85@hotmail.com",
EmailConfirmed = false,
FirstName = "Zaid",
GenderId = context.Genders.Where(g => g.Name == "Female").SingleOrDefault().Id,
IsActive = true,
LastLoggedIn = DateTime.UtcNow,
LastName = "Abu Maizar",
Locality = "LA",
LockoutEnabled = true,
LockoutEnd = null,
MaritalStatusId = context.MaritalStatus.Where(g => g.Name == "Single").SingleOrDefault().Id,
NationalityId = context.Nationalities.Where(g => g.Name == "Jordanian").SingleOrDefault().Id,
NormalizedEmail = "MAIZER85@HOTMAIL.COM",
NormalizedUserName = "ZAID",
OccupationId = context.Occupations.Where(g => g.Name == "MD").SingleOrDefault().Id,
PasswordHash = HashPassword("Zaid@core85"),
PersonalPhotoUrl = null,
PhoneNumber = "4243244990",
PhoneNumberConfirmed = false,
PostalCode = 91335,
SecurityStamp = Guid.NewGuid().ToString("N"),
SocialSecurityNo = "AABBCC",
StateId = context.States.Where(g => g.Name == "Amman").SingleOrDefault().Id,
StatusId = context.Statuses.Where(g => g.Name == "Active").SingleOrDefault().Id,
StreetDirection = "LA",
StreetNo = "123231",
TwoFactorEnabled = false,
UserName = "Zaid",
VerificationPhotoUrl = null
}
);
context.SaveChanges();
}
}
}
}
Password Hashing Method,
public static string HashPassword(string password)
{
byte[] salt;
byte[] buffer2;
if (password == null)
{
throw new ArgumentNullException("password");
}
using (Rfc2898DeriveBytes bytes = new Rfc2898DeriveBytes(password, 0x10, 0x3e8))
{
salt = bytes.Salt;
buffer2 = bytes.GetBytes(0x20);
}
byte[] dst = new byte[0x31];
Buffer.BlockCopy(salt, 0, dst, 1, 0x10);
Buffer.BlockCopy(buffer2, 0, dst, 0x11, 0x20);
return Convert.ToBase64String(dst);
}