我正在处理多租户应用程序,我们决定为每个租户建立一个数据库。我正在编写服务来为新客户端创建和初始化新数据库。在同一个DB上定义了多个上下文。到目前为止,我已经使用nuget update-database让所有上下文创建了他们的db对象。现在我需要在运行时做同样的事情。我试过了:
context.Database.Initialize(false);
context.Database.CreateIfNotExists();
但只有第一个上下文创建了它的表。我知道上下文在第一次使用时初始化db,但显然它不存在db。我尝试了几个没有运气的初始化器。我不想编写一个新的上下文,它结合了所有其他上下文,因为它很难维护。我知道另一种选择是在部署时生成sql脚本并在运行时执行它们。这将是我最后的选择。
任何建议都受到高度赞赏。
答案 0 :(得分:1)
EF6支持多个上下文的初始化。它基于ContextKey(__MigrationHistory上的属性和新字段) 它支持基于多个数据库的您(与我的相同)多租户方法 我知道添加一个链接是不好的,但这篇文章做得很好: https://msdn.microsoft.com/en-us/magazine/dn948104.aspx
答案 1 :(得分:0)
我最终使用了DbMigrator。您需要为上下文设置迁移配置类,并按照上下文执行以下操作。
var migrationConfig = new MyApp.Data.Migrations.Configuration
{
TargetDatabase = new DbConnectionInfo(tenantProfile.ConnectionString, "MySql.Data.MySqlClient")
};
var migrator = new DbMigrator(migrationConfig);
migrator.Update();