c# - 没有默认数据库时的 Entity Framework 6 和迁移

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

我有一个没有默认数据库的解决方案。我有一个主数据库,它为请求数据的客户返回一个连接字符串,每个客户都有自己的数据库。我正在使用迁移(并将 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 应用程序可能会错误地将连接字符串分配给新创建的数据库上下文。

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

关于c# - 没有默认数据库时的 Entity Framework 6 和迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30797756/

相关文章:

c# - 是否可以为文本框定义 "Word boundary"个字符?

javascript - create-react-native-app 上的 Knex.js

java - 使用 Flyway 管理修补程序

c# - 如何使用LINQ调整结果?

c# - 如何定义两个实体之间的多重关系?

c# - 查询数据库然后从返回项中删除条目的最有效方法

c# - 为什么我的列表不起作用?

C# 排序问题

c# - 忽略无效的 SSL 证书 Windows 10

mysql - 创建两个表之间的关系并创建外键