带有存储库的 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
本身。
我有一个包含多个 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
本身。