C# EF Code First DbMigrator实例化需要很长时间
我们从应用程序内部运行迁移,以动态创建数据库。我们还在单元/集成测试中使用迁移来创建要使用的数据库。几个月前,我们注意到测试的运行时间大幅增加,我们已经能够将其缩小到C# EF Code First DbMigrator实例化需要很长时间,c#,entity-framework-6,C#,Entity Framework 6,我们从应用程序内部运行迁移,以动态创建数据库。我们还在单元/集成测试中使用迁移来创建要使用的数据库。几个月前,我们注意到测试的运行时间大幅增加,我们已经能够将其缩小到DbMigrator类的实例化。即使使用非常简单的配置类,创建DbMigrator仍然需要约10秒 例如,这里的配置类取自“弹性数据库工具-实体框架”示例应用程序 internal sealed class Configuration : DbMigrationsConfiguration<ElasticScaleContex
DbMigrator
类的实例化。即使使用非常简单的配置
类,创建DbMigrator
仍然需要约10秒
例如,这里的配置类取自“弹性数据库工具-实体框架”示例应用程序
internal sealed class Configuration : DbMigrationsConfiguration<ElasticScaleContext<int>>
{
public Configuration()
{
this.AutomaticMigrationsEnabled = false;
this.ContextKey = "CodeFirstNewDatabaseSample.BloggingContext";
}
}
这是VS2015的跟踪信息
配置的时间
TargetDatabase
属性的时间
我们使用的是实体框架6.1.3。还有其他人经历过吗?我也有这种经历。在web应用程序上获得近20秒start@mirhagk,几个月前,我下载了EF源代码,以便调试。我发现EF试图确定数据库是否存在的方法是尝试连接到它。如果连接尝试超时,它将假定它不存在并创建它。然而,这一暂停需要时间。我们修改了代码,使用不同的(即更快的)方法检查数据库是否存在,如果不存在,则使用嵌入式SQL创建数据库。这大大加快了速度。不确定EF团队为什么决定采用这种方法。感谢您提供这些信息,但是这如何解决DbMigrator实例化的速度问题呢?它仍然需要用目标数据库进行实例化,或者你是如何解决这个问题的?@Gary,不幸的是,自从我在2016年发表最后一条评论以来,我们已经重写了几次代码。我不记得我们用来检查数据库是否存在的技术,但正如前面提到的注释,我们仍然使用嵌入式SQL创建数据库,然后实例化DbMigrator。这样,当底层代码检查是否存在时,它会很快找到数据库(因为连接不必超时),然后继续运行。@CraigW。好的,我想这只在数据库不存在的情况下才有帮助。知道了。在现有数据库上实例化只需要大约半秒钟,但我们正在考虑是否有改进的空间。谢谢
var configurator = new Configuration();
configurator.TargetDatabase = new DbConnectionInfo(connStrBldr.ConnectionString, "System.Data.SqlClient");
var migrator = new DbMigrator(configurator);
migrator.Update();