我有一个解决方案,其中没有一个默认数据库。我有一个主数据库,它为请求数据的客户返回一个连接字符串,每个客户都有自己的数据库。我首先使用迁移(并将AutomaticMigrationsEnabled设置为false)和代码。
命令“update-database”从代码中“超出”(Database.SetInitializer(新的MigrateDatabaseToLatestVersion());)。
第一次,这一切都很好,但是当我之后添加一个迁移时,我不能,因为有一些待处理的迁移。我无法从VS运行更新数据库,因为连接字符串是在运行时设置的。
用迁移和实体框架6处理像我这样的设置的正确方法是什么?
非常感谢
发布于 2015-06-12 08:01:14
您拥有的是所谓的多租户应用程序。是的,EF迁移也可以支持这种情况。
您只需将您的migrator从MigrateDatabaseToLatestVersion更改为自定义的迁移上下文创建的确切数据库的自定义迁移器。
然后,忘记从powershell控制台执行update-database。这总是更新默认的数据库!相反,您的自定义迁移器将自动更新您连接到的数据库。
自定义migrator的完整源代码可以在我的博客条目中找到:
http://www.wiktorzychla.com/2013/05/entity-framework-5-code-first-multi.html
请注意,由于EF的耳麦版本中有一个bug,多租户场景中的迁移从EF6.1.3开始正确地工作。
由于这个错误,您的多租户应用程序可能会错误地将连接字符串分配给新创建的db上下文。
发布于 2015-06-12 08:02:19
控制台中的Add-Migration和Update-Database仍然引用数据库。
要创建一个DbContext,这些命令要么使用它的无参数构造函数(如果有),要么它实例化一个存在的IDbContextFactory<T>,并调用它的Create方法来获得它。
在运行时没有使用这个特定的数据库并不是很重要,但是在设计时确实需要一个这样的数据库来允许您添加迁移。
https://stackoverflow.com/questions/30797756
复制相似问题