Ich versuche, mehrere DbContext auf die gleiche Datenbank zu implementieren.Erstellen von Tabellen für mehrere DbContext mit der gleichen Datenbank
Es funktioniert beim Aufrufen von DataBase.EnsureCreated() für das erste DbContext-Objekt, aber es erstellt keine Tabellen für die verbleibenden Objekte. Nach Init.Initalize() Ich möchte die Datenbank zwei Tabellen mit dem Namen Clients und Adressen enthalten
initialisieren Datenbank:
public static class Init
{
public static void Initalize(BaseDbContext[] contexts, Config.Options.Environments environment)
{
if (environment == Config.Options.Environments.Development)
{
contexts[0].Database.EnsureDeleted();
foreach(BaseDbContext context in contexts)
{
context.Database.EnsureCreated();
}
var clients = new Client[]
{
new Client() { Key = Guid.NewGuid(), Name = "Smokers.no", DisplayName = "Smokers.no", Email = "[email protected]", LogoFilename = "logo.jpg" }
};
foreach(BaseDbContext context in contexts)
{
if (context.GetType().Equals(typeof(Data.SharedDbContext)))
{
var cntx = context as Data.SharedDbContext;
foreach (Client client in clients) { cntx.Clients.Add(client); }
cntx.SaveChanges();
}
}
}
else
{
foreach(BaseDbContext context in contexts)
{
context.Database.EnsureCreated();
if (context.GetType().Equals(typeof(Data.SharedDbContext)))
{
var cntx = context as Data.SharedDbContext;
if (cntx.Clients.Any())
{
return;
}
}
}
}
}
}
BaseDbContext:
public class BaseDbContext : DbContext
{
public BaseDbContext(DbContextOptions<BaseDbContext> options) : base(options) { }
}
SharedDbContext:
public class SharedDbContext : BaseDbContext
{
public SharedDbContext(DbContextOptions<BaseDbContext> options) : base(options) { }
#region DbSets
public DbSet<Client> Clients { get; set; }
#endregion
}
MailerDbContext:
public class MailerDbContext : BaseDbContext
{
SharedDbContext _context;
public MailerDbContext(DbContextOptions<BaseDbContext> options, SharedDbContext context) : base(options)
{
_context = context;
}
public SharedDbContext LCToolsContext
{
get
{
return _context;
}
}
#region DbSets
public DbSet<Address> Addresses { get; set; }
#endregion
}
Siehe https: //github.c om/aspnet/EntityFramework/Probleme/2874 – Smit