Entity Framework - 数据库优先 - 拦截 DbContext

3
我正在开发一个使用Entity Framework 6的Web API。 Entity Framework的连接字符串使用公司标准加密。(sql server 2014)我可以很好地解密连接字符串,但我还没有找到如何拦截DbContext并设置解密后的连接字符串的方法。(在Web.config有加密连接字符串之前,我能够正常运行API,并且所有数据库调用都适当地工作)
以下代码显示了我目前如何绕过这个问题。我为我的上下文类创建了一个部分类,因为Peliquin.Context.cs类是生成的代码。我解密连接字符串(如我所验证的那样,看起来完全正确),然后将其传递到此类中。以前的代码是:base("name=ConnectionName")
错误消息似乎表明DbContext不能传递实际的连接字符串。但是,如果我传递连接名称,它会遇到连接字符串被加密的问题。
我已经搜索过了,但无法找到这个看起来很简单的问题的解决方法。任何帮助将不胜感激。
附注:此网站将部署到多个客户端站点,每个站点都有自己的数据库凭据。在安装程序将API和UI Web应用程序安装到服务器时,另一个应用程序运行,更新web.config文件以连接到适当的客户端数据库。整个过程不需要用户交互。如果有人能想出一种更好的方法来更改web.config连接字符串,然后加密它,而无需人工干预,请随时向我提出替代解决方案的建议。

你能否更新问题并提供实际的连接字符串?请用其他文本替换密码等敏感信息。参考https://dev59.com/dGw05IYBdhLWcg3w11Qk。 - Damith
2
构造函数接受一个名称或连接字符串参数,如果您的解密正常工作,则无需创建部分类。 - jamesSampica
我编辑了我的问题并包含了我的加密连接字符串。如果我在DbContext中提到这个连接名称,它会立即创建一个错误,因为它无法读取加密的连接。我正在尝试将解密后的连接字符串设置到DbContext中,如果可能的话。 - Jonathan Hansen
我将所有的"&quot"替换为单引号,但现在错误消息指出了关于“元数据”的投诉。必须有一种方法可以传递实际的连接字符串而不是连接字符串名称到DbContext。 - Jonathan Hansen
1个回答

0

好的,我似乎自己解决了这个问题。在动态生成的代码Peliquin.Context.cs中,我传递了解密后的连接字符串,一切都正常工作。我不喜欢这个解决方案的原因是,下次使用最新数据库更改更新edmx文件时,该文件将再次动态生成,抹掉我的更改,这将在未来造成麻烦。使用另一个类接收构造函数仍然似乎是更好的解决方案。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接