C# 实体框架6和迁移(当我不';我没有默认的数据库

C# 实体框架6和迁移(当我不';我没有默认的数据库,c#,database,entity-framework,entity-framework-migrations,C#,Database,Entity Framework,Entity Framework Migrations,我有一个没有默认数据库的解决方案。我有一个主数据库,为请求数据的客户返回连接字符串,每个客户都有自己的数据库。我首先使用迁移(并将AutomaticMiggerationsEnabled设置为false)和代码 “更新数据库”命令是“从代码中删除的”(database.SetInitializer(new MigrateDatabaseToLatestVersion());) 第一次一切正常,但是当我以后添加迁移时,我不能,因为有挂起的迁移。我无法从VS运行更新数据库,因为连接字符串是在运行时设

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

“更新数据库”命令是“从代码中删除的”(database.SetInitializer(new MigrateDatabaseToLatestVersion());)

第一次一切正常,但是当我以后添加迁移时,我不能,因为有挂起的迁移。我无法从VS运行更新数据库,因为连接字符串是在运行时设置的

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


非常感谢

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

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

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

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

请注意,由于EF早期版本中存在缺陷,从EF 6.1.3开始,多租户场景中的迁移工作正常

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


添加迁移
从控制台更新数据库
仍然引用数据库

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


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

非常感谢您的回复!我已经尝试过你们的例子,但我仍然不能添加新的迁移,它告诉我有挂起的更改,我需要更新数据库。你能告诉我我做错了什么吗?非常感谢。您只需要在您的开发环境中,在您的开发机器上有一个默认数据库。您不需要在部署客户端数据库的生产环境中使用默认数据库。非常感谢您指出这一点,现在我已经实现了一个默认数据库,然后它就可以工作了:-)