我有一個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'沒有定義密鑰。」 –