实体框架首先访问数据库
Posted
技术标签:
【中文标题】实体框架首先访问数据库【英文标题】: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 article 和this post 吗? @YuliamChandra 非常感谢您提供的有用链接!这不是我问题的答案,因为他们想提高性能,但现在我知道我在寻找什么。 “如何强制数据库变冷?”谢谢! 【参考方案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 中获取了连接字符串,但这应该不是问题。如果我有时间,我会重写我的代码并尝试各种解决方案。以上是关于实体框架首先访问数据库的主要内容,如果未能解决你的问题,请参考以下文章