2016-11-19 103 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