Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF Code First DbMigrator实例化需要很长时间_C#_Entity Framework 6 - Fatal编程技术网

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
    属性的时间
  • 实例化DbMigrator的时间

  • 我们使用的是实体框架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();