[英]Define a custom DbConnectionFactory for encrypt connection strings and set it as DefaultConnectionFactory in Entity Framework
我的解決方案中有一個BaseDbContext
,所有其他DbContexts
繼承自它:
public BaseDbContext(string connectionstringName): base(connectionstringName)
{
....
}
最近,我添加了以下DbConnectionFactory
來解密我的配置文件中的加密connectionstring
DbConnectionFactory
(我一次加密了配置文件):
public class EncryptedDbConnectionFactory : IDbConnectionFactory
{
public EncryptedDbConnectionFactory()
{
}
#region IDbConnectionFactory implementation
public DbConnection CreateConnection(string nameOrConnectionString)
{
var connectionStringName = nameOrConnectionString.Replace("name=","");
//Decrypt method get connectionstringName, and find connectionstring from config
//and decrypt it
var decryptedConnectionString = Decrypt(connectionStringName);
var connection= new SqlConnection(decryptedConnectionString);
return connection;
}
#endregion
}
並通過遵循DbConfiguration
類將其設置為DefaultConnectionFactory
:
public class MyConfig : DbConfiguration
{
public UseConnectionStringsConfig(bool useEncryptedDbConnectionFactory)
{
if (useEncryptedDbConnectionFactory)
{
SetProviderServices("System.Data.SqlClient",
System.Data.Entity.SqlServer.SqlProviderServices.Instance);
SetDefaultConnectionFactory(new EncryptedDbConnectionFactory(configuration));
}
else
{
//use sqlConnectionFactory
}
}
}
並在program.cs
開頭調用MyConfig
(我也從app.config
刪除了defaultConnectionFactory
部分):
DbConfiguration.SetConfiguration(new MyConfig(true));
當我運行程序時,當控制權到達var context = new MyContext();
時,出現以下異常var context = new MyContext();
線:
引發異常:System.Data.dll中的“ System.ArgumentException”
附加信息:初始化字符串的格式不符合從索引0開始的規范。
如果我將BaseDbContext
更改為:
public BaseDbContext(string connectionstringName)
: base(Database.DefaultConnectionFactory
.CreateConnection(connectionstringName), true)
{
}
程序運行無任何異常; 但是通過使用Database.DefaultConnectionFactory
作為DbContext
構造函數的參數,我得到以下警告:
'Database.DefaultConnectionFactory'已過時:'應在配置文件中或使用DbConfiguration類設置默認連接工廠。 (請參閱http://go.microsoft.com/fwlink/?LinkId=260883 )
我有兩個問題:
Database.DefaultConnectionFactory
作為DbContext
構造函數的參數相比,我可以通過更好的方法解決問題) BaseDbContext
無法正常工作? I.警告說明了這一點。 您不應使用Database.DefaultConnectionFactory = new EncryptedDbConnectionFactory(true)
。 提示您應在配置文件中進行設置:
<entityFramework>
<defaultConnectionFactory type="YourNamespace.EncryptedDbConnectionFactory, YourAssembly">
<parameters>
</parameters>
</defaultConnectionFactory>
<providers>
........
</providers>
</entityFramework>
二。 出現異常的原因是連接字符串的格式不正確。 檢查您的解密方法,並查看您的最終連接字符串是否格式正確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.