当前位置: 首页 > 编程语言 > C#

如何设置EntityFrameworkCore迁移超时时间?分享

时间:2023-04-11 03:37:37 C#

如何设置EntityFrameworkCore迁移超时时间?我使用的是最新(1.0.0)版的EFCore。我有一个在相当大的数据库上运行的迁移。我跑了:dotnetefdatabaseupdate-cApplicationDbContext得到:超时已过。在操作完成之前超时期限已过或服务器未响应。在连接字符串中,我像这样明确设置超时:connect_timeout=150000不幸的是,它没有帮助。我应该怎么办?您收到的错误消息是命令超时,而不是连接超时。更新正如Pace在评论中提到的那样,自EFCore2.0以来,您可以使用IDesignTimeDbContextFactory来更改上下文在设计时由工具创建时的行为,例如迁移时发生的情况。在您的项目中创建一个单独的类来实现IDesignTimeDbContextFactory接口,并使用DbContextoptionsBuilder来配置所需的行为——在这种情况下,将命令超时值设置为600秒:usingMicrosoft.EntityFrameworkCore;使用Microsoft.EntityFrameworkCore.Design;命名空间EFCoreSample.Model{publicclassSampleContextFactory:IDesignTimeDbContextFactory{publicSampleContextCreateDbContext(string[]args){varoptionsBuilder=newDbContextOptionsBuilder();optionsBuilder.UseSqlServer(@"Server=.;Database=db;Trusted_Connection=True;",opts=>opts.CommandTimeout((int)TimeSpan.FromMinutes(10).TotalSeconds));返回新的SampleContext(optionsBuilder.Options);}}}确保现有的DbContext具有一个将DbContextOptions对象作为参数的构造函数:如果找到,它将使用它来配置上下文。运行时行为不受影响。使用EF命令时,原始答案不再适用CommandTimeoutcannotbesetoncontext。但是您可以在构造函数中全局设置它,如果您不需要保留它,则稍后将其删除:publicclassApplicationDbContext:DbContext{publicApplicationDbContext(){Database.SetCommandTimeout(150000);在EntityFramework6中,我使用DbMigrationsConfiguration.CommandTimeout属性为迁移设置了更长的超时时间。像这样:在我的Global.asax.cs中:protectedvoidApplication_Start(){DatabaseMigrationConfig.Register();//etc}我的DatabaseMigrationConfig类:publicclassDatabaseMigrationConfig{internalstaticvoidRegister(){using(varcontext=newMyContext(Config.ConnectionStringMigrations)){Database.SetInitializer(newMigrateDatabaseToLatestVersion());context.Database.Initialize(false);我的Migrations.Configuration类:使用System.Data.Entity.Migrations;内部密封类配置:DbMigrationsConfiguration{publicConfiguration(){AutomaticMigrationsEnabled=false;AutomaticMigrationDataLossAllowed=false;CommandTimeout=360;//References:Migration:TimeouterrorinUpdate-DatabasecommandDbMigrationsConfiguration.CommandTimeoutproperty请注意,我仍在迁移中使用不同的连接字符串-用户具有比站点更高的权限并且连接超时时间更长。看到这个问题-Howtodomigrationswithadifferentconnectionstring(butthesamedatabase)您只能通过在调用迁移方法之前在上下文中设置超时来设置迁移超时:使用(varcontext=newDispatchingDbContext(_configuration)){context.Database.SetCommandTimeout(300);等待context.Database.MigrateAsync().ConfigureAwait(false);}设置迁移超时时间ef.netcore以上是C#学习教程:如何设置EntityFrameworkCore迁移超时时间?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: