我首先在SQL Server 2008上使用EF 4.3 Code。我运行了几个测试套件,用CreateIfNotExists删除并重新创建数据库。这工作得很好,但是速度很慢。在第一次调用时创建数据库可能需要15秒,通常在之后3-6秒。我有几个地方叫这个。我已经进行了优化,尽可能少地调用它。我能做些什么来以编程方式加速数据库的创建吗?如果有帮助的话,我愿意绕过EF来做这件事,但我想让我的数据库构建在代码中,而不是回到SQL脚本。谢谢!
发布于 2012-09-28 17:00:12
这很好用,但是速度太慢了。
是。重点是只将真正的数据库用于集成测试,这些测试不需要经常执行,而且整个集成测试集通常只在构建服务器上执行。
第一次调用时,创建数据库最多需要15秒
这是因为slow initialization of EF when unit testing (您可以尝试切换到x86)。时间也会被视图生成所消耗。Views can be pre-generated通常用于减少实际系统的启动和初始化,但在使用视图预生成加速单元测试的情况下,它不会有太大帮助,因为您只是将时间从测试转移到构建。
我愿意绕过EF去做这件事,如果这有帮助的话,但我想让我的数据库构建在代码中,而不是回到
到处走走就意味着使用普通的老式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数据库的单独连接字符串。
https://stackoverflow.com/questions/12626331
复制相似问题