我有一个没有默认数据库的解决方案。我有一个主数据库,它为请求数据的客户返回一个连接字符串,每个客户都有自己的数据库。我正在使用迁移(并将 AutomaticMigrationsEnabled 设置为 false)和代码优先。
命令“update-database”从代码(Database.SetInitializer(new MigrateDatabaseToLatestVersion());)中“执行”。
第一次一切正常,但是当我之后添加迁移时,我不能,因为有待处理的迁移。我无法从 VS 运行更新数据库,因为连接字符串是在运行时设置的。
使用迁移和 Entity Framework 6 处理像我这样的设置的正确方法是什么?
非常感谢
最佳答案
您拥有的是所谓的 Multi-Tenancy 应用程序。是的,EF 迁移也可以支持这种情况。
您只需将迁移器从 MigrateDatabaseToLatestVersion
更改为自定义迁移器,该迁移器将迁移为其创建上下文的确切数据库。
然后,忘记从 powershell 控制台执行 update-database
。这总是更新默认数据库!相反,您的自定义迁移器将自动更新您连接的数据库。
自定义迁移器的完整源代码可以在我的博客条目中找到:
http://www.wiktorzychla.com/2013/05/entity-framework-5-code-first-multi.html
请注意,由于 EF 早期版本中的错误, Multi-Tenancy 场景中的迁移可以正常工作从 EF 6.1.3 开始。
由于这个错误,您的 Multi-Tenancy 应用程序可能会错误地将连接字符串分配给新创建的数据库上下文。
关于c# - 没有默认数据库时的 Entity Framework 6 和迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30797756/