2016-11-19 18 views
1

まず、EF 6コード付きのOracle DBを使用しています。 接続文字列にカスタム暗号化を行いました。別の設定ファイル「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

デバッグにアプリをdefaultConnectionFactoryを設定することで解決した:あなたの接続文字列が正しく復号化されていますか? connectino文字列自体は機能しますか?エラーメッセージでWeb検索を実行します。 – 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

それは

Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory, Oracle.ManagedDataAccess.EntityFramework 
関連する問題