如何将连接字符串从appsettings.[name].json传递到.NET Core中的DbContext?
我有一个.net核心应用程序。我在appsettings.json文件中写入连接字符串。 但是,现在,我想为我的上下文获取连接字符串。怎么做 在.net framework 4.6中,我使用了以下内容:如何将连接字符串从appsettings.[name].json传递到.NET Core中的DbContext?,.net,.net-core,connection-string,dbcontext,.net,.net Core,Connection String,Dbcontext,我有一个.net核心应用程序。我在appsettings.json文件中写入连接字符串。 但是,现在,我想为我的上下文获取连接字符串。怎么做 在.net framework 4.6中,我使用了以下内容: ConfigurationManager.ConnectionStrings["ConnStrName"].ConnectionString; 我有这样的appsettings.Development.json(***可以是任何名称): 我增加了服务: services.AddTransien
ConfigurationManager.ConnectionStrings["ConnStrName"].ConnectionString;
我有这样的appsettings.Development.json(***可以是任何名称):
我增加了服务:
services.AddTransient<MyContext>(provider =>
{
return new MyContext(configuration["ConnectionStrings:***"]);
});
之后,我在运行enablemigation命令后出现了这个错误
目标上下文“MyContext”不可构造。添加默认构造函数或提供IDbContextFactory的实现
如果我可以在这里从json获取连接字符串:
一切都会好的。但如果可能的话,我想在.NET CORE中用一行代码来实现这一点,就像在.NET framework中一样:
ConfigurationManager.ConnectionStrings["ConnStrName"].ConnectionString;
.net framework 4.6
NET Core中的所有内容都是围绕依赖项注入构建的,而不是使用ConfigurationManager之类的静态实例 你可以用几种不同的方法来做 第一种方法是在Startup.cs ConfigureServices中注册您的DbContext,方法如下:
services.AddDbContext<MyContext>(context => context.UseSqlServer(Configuration.GetConnectionString("name")));
或者,如果不想这样做,也可以将“IConfiguration”注入DbContext的构造函数中,然后使用IConfiguration获取连接字符串:
public class SomeClass(IConfiguration config)
{
config.GetConnectionString("name")
}
我最初的回答不适合您的情况,因为我假设您正在移植到.NETCore,而不是维护完整的.NETFramework项目和新的.NETCore项目之间的兼容性 我对遗留项目做了类似的事情,最终创建了一个类,作为连接字符串的存储,然后根据使用它的项目是.NET Core还是完整的.NET Framework,它的填充方式会有所不同 对于完整的.NET Framework项目,它将从ConfigurationManager填充连接字符串 对于.NET核心项目,您需要从appsettings.json读取连接字符串,然后在启动时将连接字符串传递给该类 然后,您必须将DbContext中对ConfigurationManager的引用更改为您为检索连接字符串而创建的新类
public class DatabaseConfiguration
{
/// <summary>
/// Database Connection Strings
/// </summary>
private static List<ConnectionStringSettings> _conStrings;
public static List<ConnectionStringSettings> ConnectionStrings
{
get
{
//If it wasn't initialized manually, Initialize using the Configuration Manager.
if (_conStrings == null || !_conStrings.Any())
{
Initialize();
}
return _conStrings;
}
}
/// <summary>
/// Sets the connection strings from the Configuration Manager.
/// </summary>
public static void Initialize()
{
_conStrings = new List<ConnectionStringSettings>();
foreach (ConnectionStringSettings connection in ConfigurationManager.ConnectionStrings)
{
_conStrings.Add(connection);
}
}
/// <summary>
/// Sets the connection strings manually. This is used when the project is a .NET Core app because it doesn't use the Configuration Manager, app.config, or web.config.
/// </summary>
public static void Initialize(List<ConnectionStringSettings>connectionStrings)
{
_conStrings = connectionSttrings;
}
/// <summary>
/// Gets the connection string for a database with the given name.
/// </summary>
/// <param name="name">DB Name</param>
/// <returns>Connection String</returns>
public static string GetConnectionString(string name)
{
var matchingConnection = ConnectionStrings.Find(c => c.Name == name);
return matchingConnection?.ConnectionString;
}
}
公共类数据库配置
{
///
///数据库连接字符串
///
私有静态列表_解释;
公共静态列表连接字符串
{
得到
{
//如果未手动初始化,请使用Configuration Manager进行初始化。
如果(_conStrings==null | |!_conStrings.Any())
{
初始化();
}
退货(解释);;
}
}
///
///从Configuration Manager设置连接字符串。
///
公共静态void Initialize()
{
_解释=新列表();
foreach(ConfigurationManager.ConnectionString中的ConnectionString设置连接)
{
_施工。增加(连接);
}
}
///
///手动设置连接字符串。当项目是.NET Core应用程序时使用此选项,因为它不使用Configuration Manager、app.config或web.config。
///
公共静态无效初始化(ListConnectionString)
{
_构造=连接构造;
}
///
///获取具有给定名称的数据库的连接字符串。
///
///数据库名
///连接字符串
公共静态字符串GetConnectionString(字符串名称)
{
var matchingConnection=ConnectionStrings.Find(c=>c.Name==Name);
返回匹配连接?.ConnectionString;
}
}
public class SomeClass(MyContext context)
{
}
public class SomeClass(IConfiguration config)
{
config.GetConnectionString("name")
}
public class DatabaseConfiguration
{
/// <summary>
/// Database Connection Strings
/// </summary>
private static List<ConnectionStringSettings> _conStrings;
public static List<ConnectionStringSettings> ConnectionStrings
{
get
{
//If it wasn't initialized manually, Initialize using the Configuration Manager.
if (_conStrings == null || !_conStrings.Any())
{
Initialize();
}
return _conStrings;
}
}
/// <summary>
/// Sets the connection strings from the Configuration Manager.
/// </summary>
public static void Initialize()
{
_conStrings = new List<ConnectionStringSettings>();
foreach (ConnectionStringSettings connection in ConfigurationManager.ConnectionStrings)
{
_conStrings.Add(connection);
}
}
/// <summary>
/// Sets the connection strings manually. This is used when the project is a .NET Core app because it doesn't use the Configuration Manager, app.config, or web.config.
/// </summary>
public static void Initialize(List<ConnectionStringSettings>connectionStrings)
{
_conStrings = connectionSttrings;
}
/// <summary>
/// Gets the connection string for a database with the given name.
/// </summary>
/// <param name="name">DB Name</param>
/// <returns>Connection String</returns>
public static string GetConnectionString(string name)
{
var matchingConnection = ConnectionStrings.Find(c => c.Name == name);
return matchingConnection?.ConnectionString;
}
}