带有存储库的 Azure Functions 中的 EF Core DbContext

EF Core DbContext in Azure Functions with Repository

我有一个包含多个 Azure 函数和 EF Core 6 的 Azure Function App。

Startup.cs 中,我使用 AddScoped 添加存储库并传递 connectionString.

class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        string connectionString = Environment.GetEnvironmentVariable("SqlConnectionString");
        builder.Services.AddScoped<SQLRepository>(x => ActivatorUtilities.CreateInstance<SQLRepository>(x, connectionString));
    }
}

存储库本身创建 dbContext 并启动迁移。

public class SQLRepository
{
    private readonly MyDBContext _context;

    public SQLRepository(String connectionString)
    {
        var options = new DbContextOptionsBuilder<MyDBContext>().UseSqlServer(connectionString).Options;            
        _context = new MyDBContext(options);
        _context.Database.Migrate();
    }
}

但是由于 Startup 中的 Configure 在第二次创建存储库时被调用两次(每个 Azure 函数一次),我收到错误消息,对象 __EFMigrationsHistory 存在.也许吧,因为随着第二次尝试的开始,第一次迁移仍在进行中。

有什么办法可以避免这种情况吗?或者我是否必须在仅在启动时调用一次的额外 Azure 函数中执行迁移?

EF Core Migrations in Azure Function startup 启发,我使用自定义 IWebJobsStartup 并在那里执行迁移,而不是 SQLRepository 本身。