首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法在实体框架中加速CreateIfNotExists?

有没有办法在实体框架中加速CreateIfNotExists?
EN

Stack Overflow用户
提问于 2012-09-28 00:50:39
回答 1查看 879关注 0票数 3

我首先在SQL Server 2008上使用EF 4.3 Code。我运行了几个测试套件,用CreateIfNotExists删除并重新创建数据库。这工作得很好,但是速度很慢。在第一次调用时创建数据库可能需要15秒,通常在之后3-6秒。我有几个地方叫这个。我已经进行了优化,尽可能少地调用它。我能做些什么来以编程方式加速数据库的创建吗?如果有帮助的话,我愿意绕过EF来做这件事,但我想让我的数据库构建在代码中,而不是回到SQL脚本。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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:

代码语言:javascript
运行
复制
var dbSql = ((IObjectContextAdapter) context).ObjectContext.CreateDatabaseScript();

您只需要有自己的小型SQL来创建数据库并一起使用即可。即使是像下面这样的脚本也应该足够了:

代码语言:javascript
运行
复制
CREATE DATABASE YourDatabaseName

USE YourDatabaseName

您还必须首先在代码中关闭数据库生成,才能使其工作并控制该过程:

代码语言:javascript
运行
复制
Database.SetInitializer<YourContextType>(null);

当执行数据库创建SQL时,您将需要指向Master数据库的单独连接字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12626331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档