我使用的是EF 4.3代码第一次SQL Server 2008上运行我几个测试套件,删除并重新创建与CreateIfNotExists数据库。 这工作得很好,但狗慢。 它可能需要长达15秒创建在第一次调用数据库,之后,通常3-6秒。 我有几个地方,这就是所谓的。 我已经优化的,我可以把这种尽可能少的时间。 有什么我可以做,以编程方式加快创建数据库? 我愿意去走一走EF这样做是否有帮助,但我想保持我的数据库构建代码,而不是返回到一个SQL脚本。 谢谢!
Answer 1:
这工作得很好,但狗慢。
是。 问题的关键是使用真实的数据库只针对那些没有被如此频繁执行和一整套集成测试通常只生成服务器上执行的集成测试。
它可能需要长达15秒的第一次调用创建数据库
这是因为EF缓慢初始化时,单元测试 (你可以尝试切换到86)。 的时间也由视图生成消耗。 视图可以预先生成它通常是为了降低启动和实际系统的初始化,但在加快使用视图生成前不会帮助太多,因为你刚刚从测试打造移动时间单元测试的情况。
我愿意去走一走EF这样做是否有帮助,但我想保持我的数据库构建代码,而不是返回到一个SQL
绕来绕去也只是意味着使用普通的旧的SQL脚本。 需要此操作的额外时间可以在生成SQL度过。 我认为SQL不缓存,因为正常的应用程序的执行通常并不需要一次以上,但你可以问EF给你免得SQL中最重要的组成部分,它缓存的地方,并执行它自己每次你需要它的时候。 EF是能够给你的SQL表和约束:
var dbSql = ((IObjectContextAdapter) context).ObjectContext.CreateDatabaseScript();
你只需要拥有自己的小SQL创建数据库,并将它们结合使用。 即使是像下面的脚本应该足够:
CREATE DATABASE YourDatabaseName
USE YourDatabaseName
您还必须关闭数据库生成代码中第一次使这项工作,并接管过程控制:
Database.SetInitializer<YourContextType>(null);
执行数据库创建SQL时,您将需要指向不同的连接字符串Master
数据库。
文章来源: Any way to speed up CreateIfNotExists in Entity Framework?