我努力让我的代码使用不同的连接字符串来运行代码第一EF迁移,终于拿到了它的工作。
我用的方法,我的回答是概述了这个问题
让我困扰的是,为了能够使用不同的连接字符串我必须运行同一代码
1)度假村的全局设置存储连接字符串
2)引入一类,其非常存在而产生的代码,以表现不同。
这是我习惯的工作方式完全不同。 这里使用违反了固体原理的技术? 是否有这样做的任何其他方式不违反原则呢?
UPDATE:一种不同的方法-可能是更明智的概述这里
我努力让我的代码使用不同的连接字符串来运行代码第一EF迁移,终于拿到了它的工作。
我用的方法,我的回答是概述了这个问题
让我困扰的是,为了能够使用不同的连接字符串我必须运行同一代码
1)度假村的全局设置存储连接字符串
2)引入一类,其非常存在而产生的代码,以表现不同。
这是我习惯的工作方式完全不同。 这里使用违反了固体原理的技术? 是否有这样做的任何其他方式不违反原则呢?
UPDATE:一种不同的方法-可能是更明智的概述这里
(这一切都关系到什么在这里如何Database.SetInitializer实际工作(EF代码首先创建数据库,并使用多个连接字符串申请迁移)? -但进入完全不同的方向-让我觉得很有道理是分开。在此之前阅读有)
更新:
在此变得有趣。 我还是设法重现你面对真正的问题 。 这里是什么,我认为它的发生短暂故障:
首先,这个工作“愉快”:
Database.SetInitializer(new CreateAndMigrateDatabaseInitializer<MyContext, MyProject.Migrations.Configuration>());
for (var flip = false; true; flip = !flip)
{
using (var db = new MyContext(flip ? "Name=MyContext" : "Name=OtherContext"))
{
// insert some records...
db.SaveChanges();
}
}
(I使用的自定义初始化从我的其他交 ,它控制迁移/创建过程一起)
这W / O一个初始化工作的罚款。 一旦我切换上,我遇到了一些奇怪的问题。
我删除的DB-S(二,为每个连接)。 我希望无论是不行的,还是应在下一行程制作一个分贝,那么另一个(就像它,W / O迁移,只是“创建”初始化)。
发生了什么事,让我吃惊的 - 它实际上是建立在第一轮两个数据库?
然后,是一个充满好奇心的人:),我把断点MyContext
构造函数,并通过迁移/初始调试。 再次空/无分贝-S等。
它创建于内我的电话一审flip
。 然后在第一次访问“模式”,它调用初始化。 迁移接手(已经没有DB-S)。 在migrator.Update();
它实际上构建MyContext
(我通过在配置通用PARAM猜测) -并调用“默认”空构造函数。 在默认情况下有“其他连接/名称” - 并创建其他数据库都管不好。
所以,我觉得这个解释您遇到什么。 为什么你必须创建“工厂”,以支持上下文的创建。 这似乎是唯一的出路。 并设置一些“AppDomain的”宽“连接字符串”(你没发现以及实际上)用一个空构造函数调用,它不是“重写”。
解决方案,我看到的是 -你只需要运行通过工厂的一切-在有“翻转”的连接(无需静态连接,只要你的工厂是一个单。
这实际上并没有在所有(我的测试至少)有正式工作
MigrateDatabaseToLatestVersion
,为什么我用另外一个原因-初始化。