实体框架 - 数据库优先 - 拦截DbContext

时间:2016-11-18 03:05:34

标签: c# entity-framework encryption

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

以下代码显示了我迄今为止如何规避这个问题。我已经为我的上下文类创建了一个部分类,因为Peliquin.Context.cs类是生成的代码。我正在解密连接字符串,正如我已经验证的那样,看起来完全正确,然后将它传递给这个类。前面的代码是:base(“name = ConnectionName”)

错误消息看起来好像DbContext不能传递实际的连接字符串。但是,如果我传入连接名称,则会遇到连接字符串被加密的问题。

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

Imgur Imgur Imgur

web_config连接字符串,在运行时解密之前:Imgur

附注:此网站将部署到多个客户端站点,每个站点都有自己的数据库凭据。在安装程序将API和UI Web应用程序安装到服务器上时,运行另一个应用程序,将web.config文件更新为正确的客户端数据库连接。整个过程是没有用户交互。如果有人能想出更好的方法来更改web.config连接字符串,然后加密它,所有这些都没有人工干预,请随时向我建议一个替代解决方案。

1 个答案:

答案 0 :(得分:0)

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

public PeliquinDbContext(string connection)
            : base(connection)
        {
        }