Je suis à la recherche à un code en ligne où il y a deux Contextes pour la même base de données (un pour la lecture et un pour l'écriture):Pourquoi l'initialisateur de base de données doit-il être défini sur null dans un sous-contexte?
public class OrderReadContext: DbContext
{
public OrderReadContext() : base("name=GeekStuffSales") {
}
public DbSet<SalesOrder> Orders { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.HasDefaultSchema("Order");
}
}
public class OrderSystemContextConfig : DbConfiguration
{
public OrderSystemContextConfig() {
SetDatabaseInitializer(new NullDatabaseInitializer<OrderReadContext>());
}
}
réponse Ladislav Mrnkas à ce poste explique que l'initialiseur doit être réglé sur null dans les sous-contextes: Entity Framework: One Database, Multiple DbContexts. Is this a bad idea?
Pourquoi l'initialisateur de base de données doit-il être défini sur null dans un sous-contexte?
J'ai essayé d'ajouter une méthode d'amorçage à l'un de mes sous-contextes, mais cela provoque une erreur indiquant qu'il y a des migrations en suspens. Est-ce que ce n'est pas autorisé?
Voulez-vous dire que vous ne pouvez pas utiliser des méthodes de semences si une table existe dans plusieurs contextes? +1 pour la référence à la table Migrations. Merci. – w0051977
Je ne suis pas sûr d'avoir compris. Le problème concerne uniquement la création de table et la migration de table. Si vous avez 2 contextes avec les mêmes entités (mêmes classes poco) et les mêmes tables (même base de données, même schéma et même table), lorsque vous créez la base de données pour les 2 contextes ou vous changez les entités, les tables avec configuration de migration standard est exécuté 2 fois, un pour chaque contexte (donc sur la deuxième table de création, vous recevrez une erreur). Ainsi, dans votre cas, vous ne pouvez activer qu'une seule migration par défaut. Sur cette migration, vous pouvez également créer des tables de démarrage. – bubi