Entity Framework 和带有自定义加密的连接字符串
Entity Framework and Connection string with custom Encryption
我首先使用带有 EF 6 代码的 Oracle 数据库。
并对连接字符串进行自定义加密。
连接字符串存储在单独的配置文件中"connstring.config":有一个没有加密的清晰连接字符串
<?xml version="1.0" encoding="utf-8" ?>
<connectionStrings>
<add name="MyConnString" connectionString="Data Source=MySource;User ID=UserID;Password=Password;PERSIST SECURITY INFO=True;"
providerName="Oracle.ManagedDataAccess.Client" />
</connectionStrings>
web.config 文件中的数据源。
MyDbcontext:
public static string GetConnectionString()
{
string encodedConnStr = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString.ToString();
string result = Crypto.Decrypt(encodedConnStr);
return result;
}
public MyDbContext() : base(GetConnectionString()){}
当我 运行 应用程序时,我收到服务器错误:无法完成操作。提供的 SqlConnection 未指定初始目录或 AttachDBFileName。
我该如何解决这个问题?
因为您将连接字符串直接传递给 DbContext
构造函数,所以您需要为其提供数据库提供程序,否则它不知道它正在为哪种数据库类型创建连接。最简单的方法是更改连接字符串,您可以在静态方法或加密的连接字符串中执行 post 加密。根据您上面的连接,我相信 oracle.manageddataaccess.client
是正确的提供商,但请测试一下。
Provider=oracle.manageddataaccess.client;Data Source=MySource;User ID=UserID;Password=Password;PERSIST SECURITY INFO=True
您也可以根据我在 SO 上找到的其他答案进行尝试:How to set manually an Oracle Connection String in a DbContext
class MyDbContext: DbContext
{
public MyDbContext() : base(new OracleConnection(GetConnectionString()){}
...
}
如果您仍然遇到问题,请仅使用相关部分更新您的问题:当您手动提供连接字符串时,您无法实例化 DbContext
实例。正如现在所写的那样,很容易假设您的问题与 encryption/decryption 有关,但这些与实际问题无关。
通过将 defaultConnectionFactory 设置为
解决了这个问题
Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory, Oracle.ManagedDataAccess.EntityFramework
我首先使用带有 EF 6 代码的 Oracle 数据库。 并对连接字符串进行自定义加密。 连接字符串存储在单独的配置文件中"connstring.config":有一个没有加密的清晰连接字符串
<?xml version="1.0" encoding="utf-8" ?>
<connectionStrings>
<add name="MyConnString" connectionString="Data Source=MySource;User ID=UserID;Password=Password;PERSIST SECURITY INFO=True;"
providerName="Oracle.ManagedDataAccess.Client" />
</connectionStrings>
web.config 文件中的数据源。
MyDbcontext:
public static string GetConnectionString()
{
string encodedConnStr = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString.ToString();
string result = Crypto.Decrypt(encodedConnStr);
return result;
}
public MyDbContext() : base(GetConnectionString()){}
当我 运行 应用程序时,我收到服务器错误:无法完成操作。提供的 SqlConnection 未指定初始目录或 AttachDBFileName。
我该如何解决这个问题?
因为您将连接字符串直接传递给 DbContext
构造函数,所以您需要为其提供数据库提供程序,否则它不知道它正在为哪种数据库类型创建连接。最简单的方法是更改连接字符串,您可以在静态方法或加密的连接字符串中执行 post 加密。根据您上面的连接,我相信 oracle.manageddataaccess.client
是正确的提供商,但请测试一下。
Provider=oracle.manageddataaccess.client;Data Source=MySource;User ID=UserID;Password=Password;PERSIST SECURITY INFO=True
您也可以根据我在 SO 上找到的其他答案进行尝试:How to set manually an Oracle Connection String in a DbContext
class MyDbContext: DbContext
{
public MyDbContext() : base(new OracleConnection(GetConnectionString()){}
...
}
如果您仍然遇到问题,请仅使用相关部分更新您的问题:当您手动提供连接字符串时,您无法实例化 DbContext
实例。正如现在所写的那样,很容易假设您的问题与 encryption/decryption 有关,但这些与实际问题无关。
通过将 defaultConnectionFactory 设置为
解决了这个问题Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory, Oracle.ManagedDataAccess.EntityFramework