需求:需要隐藏数据库的账户密码
尝试方法:折腾了一天,翻阅了大量的网站比如https://www.cnblogs.com/wyy1234/p/9644826.html尝试了FE6CodeConfig : DbConfiguration的写法始终连不上!!!又看了EntityFramework官方文档https://docs.microsoft.com/zh-cn/ef/ef6/,又下载了github ef6的代码看他的测试代码https://github.com/aspnet/EntityFramework6,尝试了很多方法,始终连不上。
解决办法真的很简单,特分享解决方法如下:
测试环境配置:
系统版本:WIN10专业版
VS环境配置:
VS版本:VS2019
NuGet EntityFramework版本:6.4.4
.NET版本:.NET 5
EntityFramework AppConfig配置:无
关键代码如下
public class WDTConfig : DbContext
{
//通过构造函数传入连接串
public WDTConfig(string connectStr) : base(connectStr)
{
}
//调用带参的构造函数,使使用的时候变成无参构造
public WDTConfig():this(PubConstant.ConnectionString)
{
}
//public DataSet<xx> xxxx{ get; set; }
}
public class PubConstant
{
private static readonly string _connectionString=string.Empty;
static PubConstant()
{
string _dataSource = ConfigurationManager.AppSettings["System.SQLServer.DataSource"];
string _initialCatalog = ConfigurationManager.AppSettings["System.SQLServer.InitialCatalog"];
string _userId = ConfigurationManager.AppSettings["System.SQLServer.UserId"];
string _password = ConfigurationManager.AppSettings["System.SQLServer.Password"];
Boolean _encrypt = Boolean.Parse(ConfigurationManager.AppSettings["System.SQLServer.Password.Encrypt"]);
if (_encrypt)
{
_password = CEncoder.Decode(_password);//CEncoder是我自己的加解密类
}
_connectionString = $"data source={_dataSource};initial catalog={_initialCatalog};persist security info=True;user id={_userId};password={_password};";
}
/// <summary>
/// 获取连接字符串
/// </summary>
public static string ConnectionString
{
get
{
return _connectionString;
}
}
}
使用的时候:
using (var db = new WDTConfig())
{
//Add code
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!--系统数据库SQLSERVER配置-->
<add key="System.SQLServer.DataSource" value="192.168.101.172"/>
<add key="System.SQLServer.InitialCatalog" value="WDT"/>
<add key="System.SQLServer.UserId" value="sa"/>
<add key="System.SQLServer.Password.Encrypt" value="true"/>
<add key="System.SQLServer.Password" value="1232312321312"/>
</appSettings>
</configuration>