【问题标题】:Entity Framework 6 and migration when I don't have a default Database没有默认数据库时的实体框架 6 和迁移
【发布时间】:2015-06-12 07:37:22
【问题描述】:

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

“update-database”命令是从代码中“执行”的 (Database.SetInitializer(new MigrateDatabaseToLatestVersion());)。

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

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

非常感谢提前

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    请注意,由于早期版本的 EF 中存在错误,多租户方案中的迁移从 EF 6.1.3 开始可以正常工作。

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

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

    【讨论】:

    • 非常感谢您的回复!我已经尝试了您的示例,但我仍然无法添加新的迁移,它告诉我有待处理的更改,我需要更新数据库。你能告诉我我做错了什么吗?非常感谢。
    • 您只需在您的开发环境中,在您的开发机器上拥有一个默认数据库。您只是在部署客户数据库的生产环境中不需要默认数据库。
    【解决方案2】:

    来自控制台的Add-MigrationUpdate-Database 仍然引用数据库。

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

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

    【讨论】:

    • 非常感谢您指出这一点,现在我已经实现了一个默认数据库,然后它正在工作:-)
    猜你喜欢
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多