2016-09-28 17 views
0

我有我的解決方案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.DefaultConnectionFactoryDbContext構造函數的參數,我得到以下警告:

「Database.DefaultConnectionFactory」已過時:「默認連接工廠應該在配置文件中設置或使用DbConfiguration類。 (見http://go.microsoft.com/fwlink/?LinkId=260883

我有2個問題:

  1. 我怎樣才能解決這個警告(我的意思是我是如何通過更好的辦法解決這個問題不是使用Database.DefaultConnectionFactoryDbContext構造函數的參數)
  2. 爲什麼我之前的BaseDbContext無法正常工作?

回答

0

I.警告解釋說。你不應該使用Database.DefaultConnectionFactory = new EncryptedDbConnectionFactory(true)。 Insted你應該把它設置在配置文件中:

<entityFramework> 
    <defaultConnectionFactory type="YourNamespace.EncryptedDbConnectionFactory, YourAssembly"> 
     <parameters> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     ........ 
    </providers> 
    </entityFramework> 

II。異常的原因是連接字符串的格式不正確。檢查你的解密方法,看看你的最終連接字符串格式是否正確。

+0

1)我在我的配置文件中設置了defaultConnectionFactory,但問題沒有解決,我得到了同樣的異常。 2)解密的連接字符串是正確的,但在'BaseDbContext'中'Database.Connection.ConnectionString'爲空(「」),我把'var c = this.Database.Connection。ConnectionString;'在'BaseDbcontext'的構造函數中檢查它。 – Masoud

+0

@Masoud,看看[這篇文章](https://msdn.microsoft.com/en-us/data/jj680699)。這可能會幫助你。 –