实体框架首先访问数据库

时间:2014-08-18 15:32:11

标签: entity-framework

每当我打开数据库连接时,与数据库的第一次交互都需要花费很多时间。从第二次互动开始,"速度"要高得多。我认为它是实体框架的优化,看起来好像很好。但即使我使用多个数据库,它仍然是一样的。与第一个数据库的第一次交互很慢。但第一次与第二个数据库的交互很快。为什么第一次与另一个数据库的交互也不慢?另一个问题是初始化程序仅适用于第一个数据库。 (我认为这个问题是由这种优化引起的)

与此问题相关(我自己问): Entity Framework 6 SetInitializer DbContext does not work for SQL Server Express and SQL Server Compact

是否有人知道此优化的工作原理以及如何禁用它?我实际上并没有使用我比较它们的数据库,对于这种情况,禁用任何优化都会很好。

1 个答案:

答案 0 :(得分:1)

我写了一个答案,因为评论不合适。

速度Yuliam向你指出了良好的联系。

其余的,我不确定你的问题。

对我来说,以下代码(相关摘录)

class Program {
    static void Main(string[] args) {
        Database.SetInitializer<TestEFContext>(new DropCreateDatabaseAlways<TestEFContext>());

        String cs = @"Data Source=ALIASTVALK;Initial Catalog=TestEF;Integrated Security=True; MultipleActiveResultSets=True";
        using (TestEFContext ctx = new TestEFContext(cs)) {
            Console.WriteLine(ctx.Orders.Count());
        }

        cs = @"Data Source=ALIASTVALK;Initial Catalog=TestEF2;Integrated Security=True; MultipleActiveResultSets=True";
        using (TestEFContext ctx = new TestEFContext(cs)) {
            Console.WriteLine(ctx.Orders.Count());
        }            
    }
}

很好地创建并重新创建数据库TestEF和TestEF2。

我误解了你的问题吗?

=====对评论的回应:

在这种情况下,始终(重新)创建两个数据库:

  • 首先运行:创建
  • 使用SSMS填充某些表格中的某些数据
  • 第二次运行
  • 使用SSMS检查表格内容:表格为空&lt; =&gt;数据库在第二次运行时重新创建。

与您的案例只有微不足道的差异:我使用EF 6;