我正在开发多租户应用程序(ASP.NET 5 + EF7)。每个租户都有独立的数据库。我将为租户帐户数据提供一个单独的数据库。我在这个单独的数据库的启动类中注册了EF的服务。我遇到了迁移问题。我不能创建EF迁移,直到tenantDbContext被注册为具有特定连接字符串的服务。但是这个连接字符串必须对每个租户都是动态的...请有任何想法吗?管理租户的DbContexts的最佳选择是什么?EF7 + ASP.NET5 beta8 - 数据库初始值设定项
未来的编辑 - 保护覆盖无效OnConfiguring是关键怎么办:这是很好的解决方案吗?
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<TenantDbContext>();
public class TenantDbContext : IdentityDbContext<ApplicationUser>
{
public TenantDbContext() //development database with no connectionString in constructor
{
this._connectionString = "Connection String";
}
public TenantDbContext(string ConnectionString)
{
this._connectionString = ConnectionString;
}
private string _connectionString { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_connectionString);
}
...等
我最初的想法不是在启动时连接上下文,而是从工厂获取上下文。例如:'ContextFactory.Create(tenant)'。对于您可以使用的迁移:Add-Migration MyMigration -ConnectionString“此连接字符串;” ? –
感谢您的回复。提供新租户必须自动化 - C#... IDEA:我可以在连接的构造函数中使用特定的连接字符串实例化DbContext。问题是如何在没有迁移的情况下创建数据库(我不能在启动类中注册服务之前创建迁移)我不会使用SQL脚本... –
也许是第二个想法。可以通过数据库初始化程序创建数据库而无需迁移?如果是,将来如何管理数据库更改? –