gpt4 book ai didi

c# - 如何设置 Entity Framework Core 迁移超时?

转载 作者:IT王子 更新时间:2023-10-29 04:41:09 24 4
gpt4 key购买 nike

我使用的是最新 (1.0.0) 版的 EF Core。我有一个要在相当大的数据库上运行的迁移。

我跑:

dotnet ef database update -c ApplicationDbContext

并得到:

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

在连接字符串中,我明确地设置了超时时间:

Connect Timeout=150000

不幸的是,它没有帮助。我应该怎么做?

最佳答案

您收到的错误消息是针对命令 超时,而不是连接超时。

更新

Pace 所述在评论中,自 EF Core 2.0 以来,您可以使用 IDesignTimeDbContextFactory 在设计时通过工具创建上下文时更改上下文的行为,例如迁移。

在您的项目中创建一个单独的类来实现 IDesignTimeDbContextFactory 接口(interface),并使用 DbContextoptionsBuilder 来配置您想要的行为 - 在这种情况下,将命令超时值设置为600 秒:

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;

namespace EFCoreSample.Model
{
public class SampleContextFactory : IDesignTimeDbContextFactory<SampleContext>
{
public SampleContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<SampleContext>();
optionsBuilder.UseSqlServer(@"Server=.\;Database=db;Trusted_Connection=True;",
opts => opts.CommandTimeout((int)TimeSpan.FromMinutes(10).TotalSeconds));

return new SampleContext(optionsBuilder.Options);
}
}
}

确保您现有的 DbContext 具有一个将 DbContextOptions 对象作为参数的构造函数:

public AdventureContext(DbContextOptions options) : base(options){}

当工具运行迁移时,它首先查找实现 IDesignTimeDbContextFactory 的类,如果找到,将使用它来配置上下文。运行时行为不受影响。

原答案不再适用

使用 EF 命令时,无法在上下文中设置 CommandTimeout。但是你可以在构造函数中全局设置它,如果你不需要保留它,以后再删除它:

public class ApplicationDbContext : DbContext
{
public ApplicationDbContext()
{
Database.SetCommandTimeout(150000);
}
}

关于c# - 如何设置 Entity Framework Core 迁移超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39006847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com