当我没有默认数据库时,实体框架6和迁移

时间:2015-06-12 07:37:22

标签: c# database entity-framework ef-migrations

我有一个解决方案,我没有一个默认数据库。我有一个主数据库,它为请求数据的客户返回一个连接字符串,每个客户都有自己的数据库。我正在使用迁移(并将AutomaticMigrationsEnabled设置为false)并首先编码。

命令“update-database”从代码中“删除”(Database.SetInitializer(new MigrateDatabaseToLatestVersion());)。

第一次是一切正常,但是当我之后将添加迁移时,我不能,因为有待迁移。我无法从VS运行update-database,因为连接字符串是在运行时设置的。

使用迁移和Entity Framework 6处理像我这样的设置的正确方法是什么?

非常感谢提前

2 个答案:

答案 0 :(得分:1)

您所拥有的是所谓的多租户应用程序。是的,EF迁移也可以支持这种情况。

您只需将迁移器从MigrateDatabaseToLatestVersion更改为迁移为其创建上下文的确切数据库的自定义迁移器。

然后,忘记从powershell控制台执行update-database。这总是更新默认数据库!相反,您的自定义迁移器将自动更新您连接的数据库。

自定义迁移器的完整源代码可以在我的博客条目中找到:

http://www.wiktorzychla.com/2013/05/entity-framework-5-code-first-multi.html

请注意,由于EF的eariler版本中存在错误,多租户方案中的迁移可以正常运行从EF 6.1.3开始

由于此错误,您的多租户应用程序可能会错误地将连接字符串分配给新创建的数据库上下文。

https://entityframework.codeplex.com/SourceControl/changeset/4187b1c308316a22b38ef533b1409024bc0f7406

答案 1 :(得分:0)

来自控制台的

Add-MigrationUpdate-Database仍然引用数据库。

要创建DbContext,这些命令要么使用其无参数构造函数(如果有的话),要么实例化IDbContextFactory<T>(如果存在)并调用其Create方法来获取一个

您在运行时不使用此特定数据库这一事实并不重要,但您确实需要在设计时使用某个数据库以允许您添加迁移。