【问题标题】:Is adding a class that inherits from something a violation of the solid principles if it changes the behavior of code?如果它改变代码的行为,添加一个继承自某事物的类是否违反了可靠的原则?
【发布时间】:2013-04-06 22:23:22
【问题描述】:

我努力让我的代码能够使用不同的连接字符串运行代码优先 EF 迁移,最终让它工作。

我对@9​​87654321@的回答中概述了我使用的方法

困扰我的是,为了能够使用不同的连接字符串运行相同的代码,我不得不这样做

1) 使用全局设置来存储连接字符串

2) 引入一个类,该类的存在导致代码行为不同。

这与我习惯的工作方式截然不同。这里使用的技术是否违反了坚实的原则?有没有其他不违反原则的做法?

更新: 一种不同的方法 - 可能更明智的概述here

【问题讨论】:

    标签: entity-framework-5 entity-framework-migrations solid-principles


    【解决方案1】:

    (所有这些都与这里的内容有关 How does Database.SetInitializer actually work? (EF code-first create database and apply migrations using several connection strings) - 但正在走向完全不同的方向 - 所以我认为分开是有意义的。在此之前阅读那里)

    更新:

    这里越来越有趣了。 我确实设法重现了您实际面临的问题。以下是我认为正在发生的事情的简短细分:

    首先,这很“愉快”:

    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();
        }
    }
    

    (我使用了自定义初始化器from my other post,它一起控制迁移/创建过程)

    没有初始化器的情况下效果很好。一旦我打开它,我遇到了一些奇怪的问题。

    我删除了 Db-s(每个连接两个)。我希望要么不工作,要么创建一个数据库,然后在下一次传递中创建另一个数据库(就像它所做的那样,没有迁移,只是“创建”初始化程序)。

    发生了什么事,令我惊讶的是 - 它实际上是在第一次创建两个数据库 通过??

    然后,作为一个好奇的人:),我在MyContext ctor 上设置了断点,并通过迁移器/初始化程序进行了调试。再次为空/无 db-s 等。

    它在flip 中创建了我调用的第一个实例。然后在第一次访问“模型”时,它调用了初始化程序。 Migrator 接管(没有 db-s)。在migrator.Update(); 期间,它实际上构造了MyContext(我猜是通过配置中的通用参数)-并调用“默认”空ctor。默认情况下,它具有“其他连接/名称” - 并且也创建了其他 Db。

    所以,我认为这可以解释您所遇到的情况。以及为什么您必须创建“工厂”来支持上下文创建。这似乎是唯一的方法。并设置一些“AppDomain”范围的“连接字符串”(实际上您确实发现了它),它不会被空的 ctor 调用“覆盖”。

    我看到的解决方案是 - 你只需要通过工厂运行所有东西 - 并在那里“翻转”连接(不需要静态连接,只要你的工厂是单例的。 p>

    这实际上对官方根本不起作用(至少我的测试) MigrateDatabaseToLatestVersion 初始化器 - 以及我为什么 用了另一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 2014-02-15
      • 2010-11-29
      相关资源
      最近更新 更多