ASP.Net核心Web Api-使用生產(chǎn)和測試數(shù)據(jù)庫連接字符串

我正在構(gòu)建一個以asp.net為核心的web api,我想問您如何處理api中的生產(chǎn)和測試環(huán)境。目標是在IIS上發(fā)布web api,然后使用生產(chǎn)數(shù)據(jù)庫連接字符串。當我在本地啟動api時,我希望我的api能夠連接到測試數(shù)據(jù)庫,而無需更改代碼中的大量內(nèi)容。

在我的Startup.cs中,我使用實體框架如下:

services.AddDbContextFactory<ProdContext>(options =>
{
    string decrypted = ConnStringSecurity.Decrypt(Configuration.GetConnectionString("ProdDBConnection"));

    options.UseSqlServer(decrypted,
    sqlServerOptionsAction: sqlOptions =>
    {
        sqlOptions.EnableRetryOnFailure(
        maxRetryCount: 10,
        maxRetryDelay: TimeSpan.FromSeconds(5),
        errorNumbersToAdd: null
        );
    });
});

services.AddDbContextFactory<TestContext>(options =>
{
    string decrypted = ConnStringSecurity.Decrypt(Configuration.GetConnectionString("TestDBConnection"));

    options.UseSqlServer(decrypted,
    sqlServerOptionsAction: sqlOptions =>
    {
        sqlOptions.EnableRetryOnFailure(
        maxRetryCount: 10,
        maxRetryDelay: TimeSpan.FromSeconds(5),
        errorNumbersToAdd: null
        );
    });
});

在Configure方法中,我看到您可以區(qū)分開發(fā)和生產(chǎn),但我無法想象DBContext如何集成到if語句中:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
    if (env.IsDevelopment())
    {
        //Use Test Db globally
        app.UseDeveloperExceptionPage();
    }
    else if(env.IsProduction())
    {
       //Use Prod Db globally
    }


}

此外,在每個控制器中,我都注入了所需的上下文,因此如果我目前正在開發(fā)或生產(chǎn)中,我必須檢查每個端點。有沒有更有效的方法?“惰性”方法是發(fā)布我的api的兩個實例,一個用于prod,另一個用于測試,其中代碼會相應(yīng)地更改。

? 最佳回答:

您可以通過其構(gòu)造函數(shù)將IWebHostEnvironment注入Startup類,該構(gòu)造函數(shù)與Startup.Configure方法的參數(shù)中的構(gòu)造函數(shù)相同。然后,可以在Startup.ConfigureServices方法中使用env.IsDevelopment(),在該方法中設(shè)置DB上下文。

我想知道您是否真的希望在開發(fā)和生產(chǎn)環(huán)境中使用不同的數(shù)據(jù)庫上下文。

因此,對于兩種環(huán)境都有一個單一的上下文MyDbContextStartup類如下所示。然后,您的控制器將被注入MyDbContext個實例,該實例通過環(huán)境連接到不同的DB。

    public class Startup
    {
        public IConfiguration Configuration { get; }
        private readonly IWebHostEnvironment _env;

        public Startup(IConfiguration configuration, IWebHostEnvironment env)
        {
            Configuration = configuration;
            _env = env;
        }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<MyDbContext>(options =>
            {
                string decrypted = ConnStringSecurity.Decrypt(Configuration.GetConnectionString(
                    _env.IsDevelopment() ?  "TestDBConnection" : "ProdDBConnection"));
                options.UseSqlServer(decrypted,
                    sqlOptions =>
                    {
                        sqlOptions.EnableRetryOnFailure(
                            maxRetryCount: 10,
                            maxRetryDelay: TimeSpan.FromSeconds(5),
                            errorNumbersToAdd: null
                            );
                    });
            });
主站蜘蛛池模板: 亚洲一区二区三区无码国产| 亚洲一区二区三区乱码在线欧洲| 日韩人妻无码一区二区三区综合部| 精品久久久久久中文字幕一区| 精品亚洲AV无码一区二区| 亚洲AV日韩综合一区| 精品国产精品久久一区免费式| 国产免费一区二区三区不卡| 韩国精品一区视频在线播放| 精品不卡一区二区| 高清国产AV一区二区三区| 无码国产精品一区二区免费式芒果 | 高清无码一区二区在线观看吞精| 波多野结衣一区二区免费视频 | 男插女高潮一区二区| 一区二区三区人妻无码| 精品无码AV一区二区三区不卡| 一区国产传媒国产精品| 一区二区精品在线| 亚洲一区综合在线播放| 亚洲AV午夜福利精品一区二区| 久久国产香蕉一区精品| 中文字幕一区二区精品区| 国产精品免费视频一区| 成人影片一区免费观看| 全国精品一区二区在线观看| 日本一区二区三区在线网| 精品一区二区高清在线观看| 日本精品一区二区在线播放| 亚洲国产AV无码一区二区三区| 中文字幕在线观看一区| 国产精品视频一区二区三区| ...91久久精品一区二区三区| 精品人妻码一区二区三区| 91久久精品午夜一区二区| 精品欧洲av无码一区二区14| 日本一区二区三区爆乳| 国产一区二区好的精华液| 久久精品一区二区三区不卡| 国产精品成人一区无码| 亚洲Aⅴ无码一区二区二三区软件|