Je veux semer notre base de données initiale avec les utilisateurs (pour une application Web ASP.NET) sur l'installation. Pour une raison quelconque, il ne fonctionne pas correctement. J'ai lu des tas de sujets qui disent la plupart du temps exécuter update-database
qui fonctionne très bien à partir de la console, mais comment cela fonctionne dans un environnement de production? Pour tenter de contourner cela, j'ai fini avec le code suivant - qu'est-ce qui me manque ici?Code EF premier, l'ensemencement et le déploiement
Global.asax.cs :: Application_Start()
try
{
initializationError = null;
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
catch (Exception ex)
{
initializationError = ex;
}
// Initialize database and seed data
Database.SetInitializer(new EntitiesContextInitializer());
// Now initialize it
using (var context = new EMUI.Models.UsersContext())
{
if (!context.Database.Exists())
{
context.Database.Initialize(true);
}
}
EntitiesContextInitializer
internal sealed class EntitiesContextInitializer : MigrateDatabaseToLatestVersion<EMUI.Models.UsersContext, Configuration>
{
}
Configuration
internal sealed class Configuration : DbMigrationsConfiguration<EMUI.Models.UsersContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(EM.Models.UsersContext context)
{
if (!WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
if (!Roles.RoleExists("Administrator"))
{
Roles.CreateRole("Administrator");
}
// More similar seeding
}
}
Celui-ci fonctionne pour moi. – Maris