【问题标题】:Entity Framework and Connection string with custom Encryption具有自定义加密的实体框架和连接字符串
【发布时间】:2016-11-19 09:53:05
【问题描述】:

我首先使用带有 EF 6 代码的 Oracle DB。 并对连接字符串进行了自定义加密。 连接字符串存储在单独的配置文件“connstring.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>

web.config 文件中的数据源。

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。

我该如何解决这个问题?

【问题讨论】:

  • 调试您的应用程序:您的连接字符串是否被正确解密? connectino 字符串本身是否有效?对错误消息进行网络搜索。
  • 是的,解密工作正常。我试图直接在 base 中输入连接字符串,同样的事情
  • result 返回正确的连接字符串。调用 DbContext 时出现错误

标签: asp.net-mvc entity-framework connection-string


【解决方案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 实例。正如现在所写的那样,很容易假设您的问题与加密/解密有关,但这些与实际问题无关。

【讨论】:

    【解决方案2】:

    通过将 defaultConnectionFactory 设置为

    解决了
    Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory, Oracle.ManagedDataAccess.EntityFramework
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多