如何以编程方式将密码分配给ConnectionString

问题描述:

我在App.config文件中定义了ConnectionString,我检查选项是否不包含敏感数据,以便密码从连接字符串中排除。在应用程序代码中我使用实体框架和我访问DB这样的:如何以编程方式将密码分配给ConnectionString

using (var db = new Entities()) 
{     
    List<DATA> d = db.DATA.ToList(); 
} 

我想通过数据库的密码验证用户 - 用户输入其应用程序启动时。 问题是,如何在代码中手动处理ConnectionString时将此密码添加到连接字符串中?

我的父亲是这样的:

ConnectionStringSettings conn = ConfigurationManager.ConnectionStrings["Entities"]; 
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(conn.ConnectionString); 
SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder(entityBuilder.ProviderConnectionString); 
sqlBuilder.Password = "pwd"; 
entityBuilder.ProviderConnectionString = sqlBuilder.ToString();    
ConnectionStringSettings newConn = new ConnectionStringSettings("Entities",entityBuilder.ConnectionString); 

但是,这仍然无法正常工作,我不能assing新的连接字符串ConfigurationManager.ConnectionStrings - 它说,这是只读值。如何克服这一点?

您不能指定ConfigurationManager.ConnectionStrings,因为它只反映了您的应用无法更改的App.config

但是你可以告诉EF要使用的连接字符串:

using (var db = new Entities(entityBuilder.ToString())) 
{     
    List<DATA> d = db.DATA.ToList(); 
} 
+0

感谢。我原本也这么想,但是被框架生成的实体类没有提供任何这样的构造函数,现在我看到有一个基底DbContext类提供了一个被掩盖的事实,这让我感到困惑。任何想法为什么这可能是? – sherpa 2011-06-08 13:22:21

+0

那么,我的派生类有这些构造函数,所以我不知道为什么你没有看到它们。 – 2011-06-08 13:27:43