【问题标题】:Entity Framework first Access to Database实体框架首先访问数据库
【发布时间】:2014-08-18 15:32:11
【问题描述】:

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

关于这个问题(我自己问的): Entity Framework 6 SetInitializer DbContext does not work for SQL Server Express and SQL Server Compact

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

【问题讨论】:

  • 您检查过this articlethis post 吗?
  • @YuliamChandra 非常感谢您提供的有用链接!这不是我问题的答案,因为他们想提高性能,但现在我知道我在寻找什么。 “如何强制数据库变冷?”谢谢!

标签: entity-framework


【解决方案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 检查表内容:表为空 数据库在第二次运行时重新创建。

与您的情况只有微不足道的区别:我使用的是 EF 6;

【讨论】:

  • 您正确理解了我的问题。 (完美总结!Thx)你的代码看起来和我的一样安静(看看链接的帖子)。问题是第二个被调用的数据库只有在它不存在时才被(重新)创建,否则它不会被重新创建。首先调用哪个数据库无关紧要。
  • 感谢您的帮助,我的代码看起来像您的。我从 app.config 中获取了连接字符串,但这应该不是问题。如果我有时间,我会重写我的代码并尝试各种解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-10
  • 2012-09-03
相关资源
最近更新 更多