在ASP .NET MVC应用程序中使用UserManager的Seed方法期间没有创建用户

Seed方法运行时,记录/对象将添加到我的数据库中。

每个对象都应该添加,直到我尝试将用户添加到我的应用程序(在Seed方法的底部)。 没有人加入。 此外,还有很多SQLexception发布在底部。 即使Seed方法为空,它们也会被抛出。

如何将用户添加到Entity Framework托管数据库? 我按照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 = "informatyka4444@wp.pl" }; var user2 = new ApplicationUser { UserName = "emp", Email = "informatyka4444@wp.pl" }; manager.Create(user1, "admin"); manager.Create(user2, "emp"); context.SaveChanges(); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("THERE WAS AN EXCEPTION"); } } } 

编辑:

我添加了一些打印到我添加用户的部分,我也发布了一些SQLexception的输出。

 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 = "informatyka4444@wp.pl" }; var user2 = new ApplicationUser { UserName = "emp", Email = "informatyka4444@wp.pl" }; 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"); 

输出:

 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. 

编辑2

这是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 = "informatyka4444@wp.pl" }; var user2 = new ApplicationUser { UserName = "emp", Email = "informatyka4444@wp.pl" }; 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文件

     
<!-- -->

编辑3(部分解决了问题) :下面做了这个工作。 但为什么在MVC 5(上面的用户管理器)中引入的方式不起作用?

 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(); } 

当前版本的Migrations / (目录) /.Configuration.cs里面有Seed方法:

 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 = "informatyka4444@wp.pl", UserName = "informatyka4444@wp.pl"}, new ApplicationUser{PasswordHash = hasher.HashPassword("TestPass44!"), Email = "informatyka4445@wp.pl", UserName = "informatyka4445@wp.pl"} }; 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); } } } } } } } 

您必须从上下文中获取当前经理:

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

请务必为此命名空间:

 using Microsoft.AspNet.Identity.Owin; 

使用此管理器实例,您应该能够正确创建用户。