我有一个ASP.NET MVC 5项目(剃须刀引擎),它具有身份2.0个人用户帐户。我正在使用Visual Studio Professional 2013种子标识2.0数据库
我还没有找到任何明确的示例(为什么它不是开箱即用?)如何为Identity 2.0数据库创建种子,并且我看到的所有示例都有一半支持,因为它们不要说在哪里你必须实现这一点。
我使用了使用Configuration.cs文件创建Migrations文件夹的enable-migrations。它有一个Seed方法覆盖,但是当我放置一个断点时,它会注意到它永远不会被执行,事实上,Identity数据库甚至不会被模式填充。
因此,我必须做什么以便第一次在数据库上创建Identity 2.0模式(连接字符串正确且存在空数据库)。我如何装配播种?
在IdentityModels.cs我有这样的: 公共类ApplicationDbContext:IdentityDbContext { ublic ApplicationDbContext():基地( “DefaultConnection”,throwIfV1Schema:假) {}
public static ApplicationDbContext Create() {
return new ApplicationDbContext();
}
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
// to avoid the "has no keys" errors when running Update-Database on PM
modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id).ToTable("AspNetRoles");
modelBuilder.Entity<IdentityUser>().ToTable("AspNetUsers");
modelBuilder.Entity<IdentityUserLogin>().HasKey(l => new { l.UserId, l.LoginProvider, l.ProviderKey }).ToTable("AspNetUserLogins");
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId }).ToTable("AspNetUserRoles");
modelBuilder.Entity<IdentityUserClaim>().ToTable("AspNetUserClaims");
}
}
在迁移/配置。 CS(由PM添加>启用的迁移),我有这样的:在我加入这个的Application_Start()方法
internal sealed class Configuration : DbMigrationsConfiguration<Models.ApplicationDbContext> {
public Configuration() {
AutomaticMigrationsEnabled = false;
}
protected override void Seed(Models.ApplicationDbContext context) {
WriteReferenceData();
}
}
在我的Global.asax.cs文件:
System.Data.Entity.Database.SetInitializer<Models.ApplicationDbContext>(new System.Data.Entity.MigrateDatabaseToLatestVersion<Models.ApplicationDbContext, Migrations.Configuration>());
而在IdentityConfig.cs我有这个DB初始化程序以及虽然它似乎是孤儿,因为我不知道在哪里插上这样的:
public class ApplicationDbInitializer : System.Data.Entity.DropCreateDatabaseIfModelChanges<Models.ApplicationDbContext> {
protected override void Seed(ApplicationDbContext context) {
WriteReferenceData();
base.Seed(context);
}
}
最后的WriteReferenceData方法在一些其他类中,这或多或少地做到这一点:
System.Data.Entity.DbContextTransaction transaction = null;
try {
System.Data.Entity.DbContext ctx = Models.ApplicationDbContext.Create();
transaction = ctx.Database.BeginTransaction();
CreateRoles(ctx);
CreateUsers(ctx);
CreateRoleAssociations(ctx);
ctx.SaveChanges();
transaction.Commit();
succeeded = true;
}
catch (Exception ex) {
if (transaction != null { transaction.Rollback(); transaction.Dispose(); }
succeeed = false;
}
return succeeded;
不知怎的,既不是DB初始化的越来越调用。核心Identity 2.0数据库模式在应用程序运行时也未被创建。 –
当您尝试注册帐户时会发生什么? –
那么,我真正想要的是没有迁移的“原始”种子,但是因为我有迁移这样做。我做了添加迁移初始化,但是当我通过更新数据库关注它时,出现了一些错误,例如“EntityType'IdentityUserRole'没有定义密钥。” –