2016-11-19 158 views
1

我第一次使用Oracle數據庫與EF 6代碼自定義加密。 並對連接字符串進行了自定義加密。 連接字符串存儲在單獨的配置文件「connstring.config」:有不加密在web.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> 

數據源清晰的連接字符串。

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。

我該如何解決這個問題?

+0

調試您的應用程序:在您的連接字符串被正確解密? connectino字符串本身是否工作?對錯誤消息進行網絡搜索。 – Igor

+0

是的,解密工作正常。我試圖直接在基地,同樣的事情 – Drake

+0

結果返回正確的連接字符串類型的連接字符串。我調用DbContext時出現錯誤 – Drake

回答

1

因爲您正在將連接字符串直接傳遞給DbContext構造函數,所以您需要爲其提供數據庫提供程序,否則它不知道它正在爲其創建連接的數據庫類型。最簡單的做法是修改連接字符串,您可以在靜態方法或加密連接字符串中進行加密。根據您的連接上面我相信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例如當您手動提供的連接字符串。因爲它是現在寫的這是很容易使你的問題是與加密/解密的假設,但這些都是無關緊要的實際問題。

1

它解決了defaultConnectionFactory設置爲

Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory, Oracle.ManagedDataAccess.EntityFramework