2016-11-18 72 views
2

我正在开发使用实体框架6的Web API。实体框架的连接字符串使用公司标准加密进行加密。 (sql server 2014)我可以解密连接字符串,但我一直无法弄清楚如何拦截DbContext来设置解密的连接字符串。 (在Web.config有一个加密的连接字符串之前,我能够很好地运行API,并且所有数据库调用都能正常工作)实体框架 - 数据库优先 - 拦截DbContext

下面的代码显示了我迄今为止如何绕过这个问题。我为我的上下文类创建了一个分类,因为Peliquin.Context.cs类是生成的代码。我解密连接字符串,正如我已经验证,看起来完全正确,然后将其传递到这个类。上面的代码是:基地(“NAME =则connectionName”)

错误消息仿佛的DbContext不能传递到它的实际连接字符串。但是,如果我传入连接名称,它会遇到连接字符串被加密的问题。

我已经搜索,并一直无法找到解决这个看似简单的问题。任何帮助,将不胜感激。

ImgurImgur Imgur

web.config中的连接字符串,之前我在运行时将其解密:Imgur

附注:本网站将部署到多个客户的网站,每一个都有自己的数据库证书。在安装程序将API和UI Web应用程序安装到服务器上时,会运行另一个应用程序,将web.config文件更新为正确的客户端数据库连接。整个过程是没有用户交互。如果任何人都可以想到更改web.config连接字符串的更好方法,然后加密它,所有这些都不需要人工交互,请随时为我提供替代解决方案。

+0

您可以更新您的实际的连接字符串的问题?取代密码等。与其他一些文本,检查http://stackoverflow.com/questions/6997035/keyword-not-supported-data-source-initializing-entity-framework-context – Damith

+2

构造函数的名称或连接字符串参数,如果你的解密工作正常,那么应该没有必要做一个部分类 – Shoe

+0

我编辑了我的问题,并包括我的加密连接字符串。如果我将这个连接名称全部提及到DbContext,它会立即创建一个错误,因为它无法读取加密的连接。我试图将解密的连接字符串设置为DbContext,如果可能的话。 –

回答

0

嗯,我貌似固定自己的问题。在动态生成的代码Peliquin.Context.cs中,我传递了解密的连接字符串,并且它一切正常。我不喜欢这个解决方案的是,下一次edmx文件更新为最新的数据库更改时,会再次动态生成此文件,消除我的更改,这将在未来造成严重破坏。让另一个类采用构造函数,似乎仍然是一个更好的解决方案。

public PeliquinDbContext(string connection) 
      : base(connection) 
     { 
     } 
相关问题