La base de données est créée avec succès (comme le sont les tableaux), mais elle n'est pas amorcée. J'ai passé plusieurs heures et de lire des tonnes d'articles, mais n'ont pas été en mesure de l'obtenir. Toutes les suggestions?
Sur une note de côté, est-il possible d'appeler l'initialiseur, sans avoir une référence à mon DatabaseContext dans le client?
J'ai inclus tous les code que je pouvais penser. Si quoi que ce soit d'autre serait utile, s'il vous plaît laissez-moi savoir.
Les choses que j'ai Essayé:
- J'ai supprimé ma chaîne de connexion (car il est par défaut sqlexpress de toute façon, juste le nom a été changé)
- J'ai changé DropCreateDatabaseIfModelChanges à DropCreateDatabaseAlways, toujours le même.
Edit: vraiment étrange c'est que cela a fonctionné une fois, mais je n'ai aucune idée de comment ou pourquoi il a éclaté de nouveau. Je suis en supposant que les chaînes de connexion, mais qui sait.
DatabaseInitializer.cs
public class DatabaseInitializer : DropCreateDatabaseIfModelChanges<DatabaseContext>
{
protected override void Seed(DatabaseContext context)
{
// Seeding data here
context.SaveChanges();
}
}
DatabaseContext.cs
public class DatabaseContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder mb)
{
// Random mapping code
}
public DbSet<Entity1> Entities1 { get; set; }
public DbSet<Entity2> Entities2 { get; set; }
}
Mondiale.asax.cs - Application_Start()
protected void Application_Start()
{
Database.SetInitializer<DatabaseContext>(new DatabaseInitializer());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
Client web.config
<connectionStrings>
<add name="DatabaseContext" connectionString="data source=.\SQLEXPRESS;Database=Database;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>
SOLUTION
Pour l'amour de la documentation, je vais partager ma solution ici. La navigation de tous les commentaires serait une douleur, de toute façon. À la fin j'avais DatabaseInitializer et DatabaseContext dans des classes séparées. Je ne comprends pas vraiment tout ces petits changements fixe, mais ici il est.
DatabaseInitializer.cs
public class DatabaseInitializer : CreateDatabaseIfNotExists<DatabaseContext>
{
protected override void Seed(DatabaseContext context)
{
// Seed code here
}
}
DatabaseContext.cs
public class DatabaseContext : DbContext
{
public DatabaseContext() : base("MyDatabase") { }
protected override void OnModelCreating(DbModelBuilder mb)
{
// Code here
}
public DbSet<Entity> Entities { get; set; }
// Other DbSets
}
Mondiale.asax.cs - Application_Start()
protected void Application_Start()
{
Database.SetInitializer(new DatabaseInitializer());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}