簡體   English   中英

如何在長時間運行的過程中處理實體框架的生命周期?

[英]How to handle Entity Framework lifetime in a long-running process?

我正在制作一個數據提取工具(.NET Core 控制台應用程序),它將處理數萬個文件並將提取的數據寫入數據庫。 只有插入數據庫,沒有讀取或更新。 我打算運行多個實例,所有實例都寫入同一個表。

我將 Autofac 用於 DI,並將 EF DB 上下文注入到 class 中,該 class 循環遍歷文件並寫入數據庫。

我想保持 DB Context 的生命周期很短,但我不確定如何使用 DI 來做到這一點。 是否有某種“刷新”操作來有效地更新 DBContext? 或者我應該注入一個 DBContextFactory 並為每個處理的文件獲取一個新的 DBContext? (如果是,工廠是什么樣子的?它是否顯式地構造了一個新的 DBContext?)

如果您持有注入的 DbContext 實例並在循環中使用它,那么顯然 DbContext 的生命周期不會很短。

正如您所建議的,在 DI 中使用 Context Builder。 下面是一個使用 SQLServer 創建類型 T 的上下文的示例:

public class DbContextBuilder<T> where T : DbContext
{
    public readonly T Context;
    public DbContextBuilder(string connectionStringName)
    {
        IConfigurationBuilder cfgBuilder = new ConfigurationBuilder();
        cfgBuilder.AddJsonFile("appsettings.json");
        IConfiguration cfg = cfgBuilder.Build();

        DbContextOptionsBuilder<T> optsBuilders = new DbContextOptionsBuilder<T>();
        optsBuilders.UseSqlServer(cfg.GetConnectionString(connectionStringName));
        Context = (T)Activator.CreateInstance(typeof(T), optsBuilders.Options);
    }
}

在每個循環中:

foreach (var file in files)
{
    using (DbContext ctx = new DbContextBuilder<DbContext>("{name of conn string in appsettings}").Context)
    {
        // Do you writes for the current file
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM