EF7 + ASP.NET5 beta8 - 数据库初始值设定项
我正在开发多租户应用程序(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);
}
...等
正如我在评论中提到我还没有尝试过的多租户/多分贝自己,但尝试以下方法:
可以使用的DbContext CreateIfNotExists()
方法。 https://msdn.microsoft.com/en-us/library/system.data.entity.database.createifnotexists(v=vs.113).aspx
如果你有一个迁移/ Configuration.cs可以AutomaticMigrationsEnabled属性设置为false
设置初始化断大概需要以及:Database.SetInitializer<DatabaseContext>(null);
对不起不知道像创建一个工作流程的详细信息新租户(自动从数据库或填写连接字符串和名称等屏幕)我不能提出更详细的建议。我建议你的数据层从上下文中抽象出来。开发人员不得不选择正确的上下文似乎是一个坏主意。因此使用工厂。
的选项始终要求租户ID将被传递到所有的服务或资料库的方法。我猜这将会出现在控制器中的某种用户声明中。
谢谢你的回答。好主意..我现在有可能构建tenantDbContext。我在这里创建了EF7数据库初始化工具:[https://github.com/aspnet/EntityFramework/wiki/Entity-Framework-Design-Meeting-Notes---May-29,-2014](https://github.com/ aspnet/EntityFramework/wiki/Entity-Framework-Design-Meeting-Notes --- May-29,-2014)每个tenantDbContext都可以通过工厂基于url:tenant1.site.com实例化,并注入特定租户数据库的通用存储库操作。我将为每个请求使用一个实例。 –
我最初的想法不是在启动时连接上下文,而是从工厂获取上下文。例如:'ContextFactory.Create(tenant)'。对于您可以使用的迁移:Add-Migration MyMigration -ConnectionString“此连接字符串;” ? –
感谢您的回复。提供新租户必须自动化 - C#... IDEA:我可以在连接的构造函数中使用特定的连接字符串实例化DbContext。问题是如何在没有迁移的情况下创建数据库(我不能在启动类中注册服务之前创建迁移)我不会使用SQL脚本... –
也许是第二个想法。可以通过数据库初始化程序创建数据库而无需迁移?如果是,将来如何管理数据库更改? –