簡體   English   中英

在類庫中執行asp.net核心EF遷移而無需對連接字符串進行硬編碼

[英]Executing asp.net core EF migration in a class library without hardcoding connection string

我想在單獨的環境中執行遷移。 我正在使用實體框架和ASP.NET Core。 現在我有這個:

public class TemporaryDbContextFactory : IDbContextFactory<ApplicationDbContext>
{
    public ApplicationDbContext Create(DbContextFactoryOptions options)
    {
        var builder = new DbContextOptionsBuilder<ApplicationDbContext>();
        builder.UseSqlServer("Data Source=.\\LOCALHOST;Initial Catalog=MyDB;Integrated Security=True;MultipleActiveResultSets=true");

        return new ApplicationDbContext(builder.Options);
    }
}

該代碼位於DAL類庫中,該庫將數據庫交互與服務器代碼分開。

在執行遷移時可以使用此功能,但我真的不喜歡這樣做。

這里的問題是,我使用本地數據庫進行開發,但是我們也有帶有不同連接字符串的開發服務器和登台服務器。 我無法做的是找到一種不對此類中的連接字符串進行硬編碼的方法。

有沒有一種方法可以為不同的環境配置連接字符串,並指示執行遷移時使用哪個?

是的,您可以為此使用環境變量。

這就是為什么要進行appsettings.<EnvironmentName>.json

在ASP.NET Core中進行配置
不錯的Microsoft文章擅長使用多種環境


FYI
Environment.GetEnvironmentVariable

您需要將DbContextOptionsBuilder<ApplicationDbContext>注入到工廠構造函數中,然后在主應用程序的Startup.cs配置DbContext。

public class TemporaryDbContextFactory : IDbContextFactory<ApplicationDbContext>
{
    private readonly DbContextOptionsBuilder<ApplicationDbContext> optionsBuilder;

    public TemporaryDbContextFactory(DbContextOptionsBuilder<ApplicationDbContext> optionsBuilder)
    {
        if(optionsBuilder==null)
            throw new ArgumentNullException(nameof(optionsBuilder));

        this.optionsBuilder = optionsBuiler;
    }

    public ApplicationDbContext Create(DbContextFactoryOptions options)
    {
        return new ApplicationDbContext(optionsBuilder.Options);
    }
}

在Startup.cs中:

services.AddDbContext<ApplicationDbContext>(options => {
    options.UseSqlServer(Configuration.GetConnectionString("MyConnectionString"));
});

Configuration.GetConnectionString("MyConnectionString")Configuration["ConnectionStrings:MyConnectionString"]簡寫。

暫無
暫無

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

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