如何使用EF 4.1 Code First加密连接字符串?

时间:2011-03-28 16:27:41

标签: winforms entity-framework code-first

我正在使用Code First RC来构建类库,我希望能够加密我正在使用的连接字符串。类库的使用者可能是ASP.NET或Windows Forms应用程序,因此我需要一种兼容两者的加密方法。

看来我可以通过名称传递连接字符串到DbContext,但不是按值传递,如here所示,所以我认为在将字符串传递给DbContext之前我不能在程序中手动解密。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:3)

您可以轻松加密任何.NET配置部分 - 不仅仅是在ASP.NET中,正如许多开发人员所想的那样,但绝对也可以在其他应用程序中加密。

在主题上查看Jon Galloway's blog post - 精彩阅读!

使用这种方法,您可以加密<connectionStrings>部分 - 并且为了使其更容易,您也可以将该部分外部化为单独的文件。

因此,在您的Winforms应用的app.config中,您将拥有:

<connectionStrings configSource="ConnectionStrings.config" />

,您的web.config也适用于您的网络应用程序,引用的文件只包含<connectionStrings>,可以加密。从您的配置加载适当的连接字符串,并将其传递到您的DbContext构造函数中,您应该没问题。

答案 1 :(得分:1)

您可以将完整的连接字符串传递给DbContext:

http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-2-connections-and-models.aspx

在“其他DbContext构造函数选项”下:

  

...

     
      
  • 您可以将完整的连接字符串传递给DbContext,而不仅仅是   数据库或连接字符串   名称。默认情况下此连接   字符串与。一起使用   System.Data.SqlClient提供程序;   这可以通过设置一个来改变   不同的执行方式   IConnectionFactory上   context.Database.DefaultConnectionFactory。
  •   
  • 您可以通过传递现有的DbConnection对象   到DbContext构造函数。如果   连接对象是一个实例   EntityConnection,然后是模型   在连接中指定的将是   用于Database / Model First模式。   如果对象是。的实例   一些其他类型 - 例如,   SqlConnection-那么上下文会   将它用于Code First模式。
  •   
     

...

如果是这样,那么您可以使用AES或其他加密来加密.config文件中的字符串,然后在运行时解密并将其提供给DbContext构造函数。