我有我的解決方案BaseDbContext
,從它繼承所有其他DbContexts
:定義加密連接字符串的自定義DbConnectionFactory和實體將其設置爲DefaultConnectionFactory框架
public BaseDbContext(string connectionstringName): base(connectionstringName)
{
....
}
最近我添加以下DbConnectionFactory
解密我的加密在我的配置文件connectionstring
(我加密的配置文件一次):
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
}
,並按照設置爲DefaultConnectionFactory
210類:
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
}
}
}
和(從我的app.config
我刪除defaultConnectionFactory
部分太)在我program.cs
的開始撥打MyConfig
:
DbConfiguration.SetConfiguration(new MyConfig(true));
當我運行該程序,我得到控制時reachs到以下異常var context = new MyContext();
line:
拋出的異常: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)
我有2個問題:
- 我怎樣才能解決這個警告(我的意思是我是如何通過更好的辦法解決這個問題不是使用
Database.DefaultConnectionFactory
爲DbContext
構造函數的參數) - 爲什麼我之前的
BaseDbContext
無法正常工作?
1)我在我的配置文件中設置了defaultConnectionFactory,但問題沒有解決,我得到了同樣的異常。 2)解密的連接字符串是正確的,但在'BaseDbContext'中'Database.Connection.ConnectionString'爲空(「」),我把'var c = this.Database.Connection。ConnectionString;'在'BaseDbcontext'的構造函數中檢查它。 – Masoud
@Masoud,看看[這篇文章](https://msdn.microsoft.com/en-us/data/jj680699)。這可能會幫助你。 –