[英]Injecting settings into EF core context in class library
我的API項目中的appsettings.json中有我的連接字符串,我想在我的數據庫項目中的上下文中使用它。 通常,依賴注入可以解決問題,但是,當我運行遷移時,會出現以下錯誤:
無法創建“上下文”類型的對象。 有關設計時支持的不同模式,請參閱https://go.microsoft.com/fwlink/?linkid=851728 !
在上下文中對連接字符串進行硬編碼可解決此問題,但對我而言,這不是一個可行的解決方案,因為我需要根據環境更改連接字符串。 請從API項目中查看我的ConfigureServices方法,從數據庫項目中查看上下文。
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed
// for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
services.AddDbContext<Context>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
public class Context : DbContext
{
private readonly IOptions<AppSettings> _settings;
public Context(IOptions<AppSettings> settings) : base()
{
_settings = settings;
}
public Context(IOptions<AppSettings> settings, DbContextOptions<Context> options) : base(options)
{
_settings = settings;
}
***DBSets***
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_settings.Value.DBConnectionString);
}
}
在.NET Core中最簡單的方法如下:
services.AddDbContext<Context>(options => {
options.UseSqlServer(Configuration.GetConnectionString("<key in appsettings>"));
});
您的Context
類確實應該繼承DbContext
。 這也將允許對Context
進行依賴注入。
您的應用設置應如下所示:
"ConnectionStrings" : {
"<key in appsettings>" : "<connection string>"
},
其中ConnectionStrings
在設置json中位於根級別。
我找到了解決方案,請參閱下文。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System;
namespace Database
{
public class Context : DbContext
{
public Context() : base()
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\..\")
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
ConnectionString = configuration.GetConnectionString("Database");
}
public string ConnectionString { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(ConnectionString);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.