Nessun utente è stato creato durante il metodo Seed utilizzando UserManager nelle applicazioni ASP .NET MVC

Quando viene eseguito il metodo Seed , i record / oggetti vengono aggiunti al mio database.

Ogni object viene aggiunto come dovrebbe finché non provo ad aggiungere utenti alla mia applicazione (in fondo al metodo Seed ). Non è stato aggiunto nessuno Inoltre ci sono molte eccezioni SQL lanciate in fondo. Vengono lanciati anche se il metodo Seed è vuoto.

Come aggiungere utenti al database gestito di Entity Framework? Ho creato il mio codice seguendo il tutorial di Scott Allen.

  protected override void Seed(WebApplication2.Models.ApplicationDbContext context) { System.Diagnostics.Debug.WriteLine("Seed started");//IT WORKS if (!context.Persons.Any()) { var persons = new List { new Person{FirstName = "John", LastName = "Doe", CellNumber = "123-456-789", SecondaryPhoneNumber = "98873213", Address = "1street 2",BirthDate = DateTime.Now.Date, Pesel = "312312312", Notes = "Annoying"}, new Person{FirstName = "Anna", LastName = "Doe", CellNumber = "113-456-789", SecondaryPhoneNumber = "98873213", Address = "1street 2",BirthDate = DateTime.Now.Date, Pesel = "548555672", Notes = "Less Annoying"} }; persons.ForEach(person => context.Persons.AddOrUpdate(person)); context.SaveChanges(); } if (!context.Meetings.Any()) { var meetings = new List{ new Meeting{PersonId = 1, Body = "Body of meeting", Date = DateTime.Now} }; meetings.ForEach(meeting => context.Meetings.AddOrUpdate(meeting)); context.SaveChanges(); } if (!context.Statuses.Any()) { var statuses = new List { new Status{Name = "OK"}, new Status {Name = "NOT_OK"} }; statuses.ForEach(status => context.Statuses.AddOrUpdate(status)); context.SaveChanges(); } //EVERYTHING TILL NOW WORKS //Users Seeding if (!context.Users.Any()) { System.Diagnostics.Debug.WriteLine("USER SEED"); try { var store = new UserStore(context); var manager = new UserManager(store); //why user is not created var user1 = new ApplicationUser { UserName = "admin", Email = "[email protected]" }; var user2 = new ApplicationUser { UserName = "emp", Email = "[email protected]" }; manager.Create(user1, "admin"); manager.Create(user2, "emp"); context.SaveChanges(); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("THERE WAS AN EXCEPTION"); } } } 

MODIFICARE:

Ho aggiunto alcune stampe alla sezione in cui aggiungo utenti anche io ho postato l’output con alcune eccezioni SQL.

 if (!context.Users.Any()) { System.Diagnostics.Debug.WriteLine("USER SEED"); try { System.Diagnostics.Debug.WriteLine("1"); var store = new UserStore(context); var manager = new UserManager(store); //why user is not created System.Diagnostics.Debug.WriteLine("2"); var user1 = new ApplicationUser { UserName = "admin", Email = "[email protected]" }; var user2 = new ApplicationUser { UserName = "emp", Email = "[email protected]" }; System.Diagnostics.Debug.WriteLine("3"); manager.Create(user1, "admin"); manager.Create(user2, "emp"); System.Diagnostics.Debug.WriteLine("4"); context.SaveChanges(); System.Diagnostics.Debug.WriteLine("5"); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("THERE WAS AN EXCEPTION"); } System.Diagnostics.Debug.WriteLine("6"); 

Produzione:

 CONSTRCTOR CONSTRCTOR A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll A first chance exception of type 'System.Data.Entity.Core.EntityCommandExecutionException' occurred in EntityFramework.dll A first chance exception of type 'System.Data.Entity.Core.EntityCommandExecutionException' occurred in EntityFramework.dll A first chance exception of type 'System.Data.Entity.Core.EntityCommandExecutionException' occurred in EntityFramework.dll A first chance exception of type 'System.Data.Entity.Core.EntityCommandExecutionException' occurred in EntityFramework.SqlServer.dll CONSTRCTOR Seed started USER SEED 1 2 3 'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/14/ROOT-1-130527942456023568): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_pl_b77a5c561934e089\mscorlib.resources.dll'. Module was built without symbols. 4 5 6 'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/14/ROOT-1-130527942456023568): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ServiceModel.Internals\v4.0_4.0.0.0__31bf3856ad364e35\System.ServiceModel.Internals.dll'. Symbols loaded. 

MODIFICA 2

Ecco CONSTRUCTOR :

Models.IdentityModels.cs

 using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using System.Data.Entity; using System.Data.Entity.ModelConfiguration.Conventions; namespace WebApplication2.Models { // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more. public class ApplicationUser : IdentityUser { public async Task GenerateUserIdentityAsync(UserManager manager) { // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); // Add custom user claims here return userIdentity; } } public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false) { System.Diagnostics.Debug.WriteLine("CONSTRCTOR"); } public DbSet Persons { get; set; } public DbSet Meetings { get; set; } public DbSet Statuses { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Conventions.Remove(); } public static ApplicationDbContext Create() { return new ApplicationDbContext(); } } } 

Migrations.Confriguration.cs

 namespace WebApplication2.Migrations { using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using System; using System.Collections.Generic; using System.Data.Entity; using System.Data.Entity.Migrations; using System.Linq; using WebApplication2.Models; internal sealed class Configuration : DbMigrationsConfiguration { public Configuration() { AutomaticMigrationsEnabled = true; ContextKey = "WebApplication2.Models.ApplicationDbContext"; } protected override void Seed(WebApplication2.Models.ApplicationDbContext context) { /* System.Diagnostics.Debug.WriteLine("Seed started"); if (!context.Persons.Any()) { var persons = new List { new Person{FirstName = "John", LastName = "Doe", CellNumber = "123-456-789", SecondaryPhoneNumber = "98873213", Address = "1street 2",BirthDate = DateTime.Now.Date, Pesel = "312312312", Notes = "Annoying"}, new Person{FirstName = "Anna", LastName = "Doe", CellNumber = "113-456-789", SecondaryPhoneNumber = "98873213", Address = "1street 2",BirthDate = DateTime.Now.Date, Pesel = "548555672", Notes = "Less Annoying"} }; persons.ForEach(person => context.Persons.AddOrUpdate(person)); context.SaveChanges(); } if (!context.Meetings.Any()) { var meetings = new List{ new Meeting{PersonId = 1, Body = "Body of meeting", Date = DateTime.Now} }; meetings.ForEach(meeting => context.Meetings.AddOrUpdate(meeting)); context.SaveChanges(); } if (!context.Statuses.Any()) { var statuses = new List { new Status{Name = "OK"}, new Status {Name = "NOT_OK"} }; statuses.ForEach(status => context.Statuses.AddOrUpdate(status)); context.SaveChanges(); }*/ //Users Seeding if (!context.Users.Any()) { System.Diagnostics.Debug.WriteLine("USER SEED"); try { System.Diagnostics.Debug.WriteLine("1"); var store = new UserStore(context); var manager = new UserManager(store); //why user is not created System.Diagnostics.Debug.WriteLine("2"); var user1 = new ApplicationUser { UserName = "admin", Email = "[email protected]" }; var user2 = new ApplicationUser { UserName = "emp", Email = "[email protected]" }; System.Diagnostics.Debug.WriteLine("3"); manager.Create(user1, "admin"); manager.Create(user2, "emp"); System.Diagnostics.Debug.WriteLine("4"); context.SaveChanges(); System.Diagnostics.Debug.WriteLine("5"); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("THERE WAS AN EXCEPTION"); } System.Diagnostics.Debug.WriteLine("6"); } } } } 

global.asax

 using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; using WebApplication2.Migrations; using WebApplication2.Models; namespace WebApplication2 { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { System.Diagnostics.Debug.WriteLine("Application_Start"); Database.SetInitializer(new MigrateDatabaseToLatestVersion()); new ApplicationDbContext().Database.Initialize(true); AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } } } 

web.config

     
<!-- -->

EDIT 3 (parzialmente risolto problema) : questo di seguito ha fatto il lavoro. Ma perché la modalità introdotta in MVC 5 (User Manager sopra) non funziona?

 System.Diagnostics.Debug.WriteLine("BEFORE " + !context.Users.Any()); if (!context.Users.Any()) { System.Diagnostics.Debug.WriteLine("INSIDE"); var hasher = new PasswordHasher(); var users = new List { new ApplicationUser{UserName = "admin", PasswordHash = hasher.HashPassword("admin")} }; users.ForEach(user => context.Users.AddOrUpdate(user)); context.SaveChanges(); } 

Versione corrente di Migrations / (directory) /.Configuration.cs con il metodo Seed all’interno:

 namespace WebApplication2.Migrations { using Microsoft.AspNet.Identity; using System; using System.Collections.Generic; using System.Data.Entity.Migrations; using System.Data.Entity.Validation; using System.Linq; using WebApplication2.Models; internal sealed class Configuration : DbMigrationsConfiguration { public Configuration() { AutomaticMigrationsEnabled = true; ContextKey = "WebApplication2.Models.ApplicationDbContext"; } protected override void Seed(WebApplication2.Models.ApplicationDbContext context) { System.Diagnostics.Debug.WriteLine("Seed started"); if (!context.Persons.Any()) { var persons = new List { new Person{FirstName = "John", LastName = "Doe", CellNumber = "123-456-789", SecondaryPhoneNumber = "98873213", Address = "1street 2",BirthDate = DateTime.Now.Date, Pesel = "312312312", Notes = "Annoying"}, new Person{FirstName = "Anna", LastName = "Doe", CellNumber = "113-456-789", SecondaryPhoneNumber = "98873213", Address = "1street 2",BirthDate = DateTime.Now.Date, Pesel = "548555672", Notes = "Less Annoying"} }; persons.ForEach(person => context.Persons.AddOrUpdate(person)); context.SaveChanges(); } if (!context.Meetings.Any()) { var meetings = new List{ new Meeting{PersonId = 1, Body = "Body of meeting", Date = DateTime.Now} }; meetings.ForEach(meeting => context.Meetings.AddOrUpdate(meeting)); context.SaveChanges(); } if (!context.Statuses.Any()) { var statuses = new List { new Status{Name = "OK"}, new Status {Name = "NOT_OK"} }; statuses.ForEach(status => context.Statuses.AddOrUpdate(status)); context.SaveChanges(); } //Users Seeding System.Diagnostics.Debug.WriteLine("BEFORE " + !context.Users.Any()); if (!context.Users.Any()) { System.Diagnostics.Debug.WriteLine("INSIDE"); var hasher = new PasswordHasher(); try { var users = new List { new ApplicationUser{PasswordHash = hasher.HashPassword("TestPass44!"), Email = "[email protected]", UserName = "[email protected]"}, new ApplicationUser{PasswordHash = hasher.HashPassword("TestPass44!"), Email = "[email protected]", UserName = "[email protected]"} }; users.ForEach(user => context.Users.AddOrUpdate(user)); context.SaveChanges(); } catch (DbEntityValidationException e) { System.Diagnostics.Debug.WriteLine("EXC: "); foreach (DbEntityValidationResult result in e.EntityValidationErrors) { foreach (DbValidationError error in result.ValidationErrors) { System.Diagnostics.Debug.WriteLine(error.ErrorMessage); } } } } } } } 

Devi ottenere il manager corrente dal contesto:

 var manager = HttpContext.Current.GetOwinContext().GetUserManager(); 

Assicurati di inserire lo spazio dei nomi per questo:

 using Microsoft.AspNet.Identity.Owin; 

Utilizzando questa istanza manager, dovresti essere in grado di creare correttamente un utente.