从Web.Config获取多个connectionStrings到字典c#没有循环
Posted
技术标签:
【中文标题】从Web.Config获取多个connectionStrings到字典c#没有循环【英文标题】:Get multiple connectionStrings from Web.Config to a dictonary c# without loop 【发布时间】:2020-12-09 11:29:12 【问题描述】:在我的 MVC 应用程序中,我的 web.config - 连接字符串部分中有 3 个连接字符串。 没有循环我想将配置中指定的所有连接字符串 字典。 我在下面使用循环尝试过。
foreach (var item in Environments)
connString = ConfigurationManager.ConnectionStrings["[string.Format("ConnectionString_0",item )].ToString();
Dictionary.add(item , connString );
------------ IN Web.config
<configuration>
<connectionStrings>
<add name="ConnectionString_Dev" connectionString="Data Source=xxxxxxxx;Initial Catalog=yyyy;Integrated Security=True" providerName="System.Data.SqlClient" />
<add name="ConnectionString_PreProd" connectionString="Data Source=xxxxxxxx;Initial Catalog=yyyy;Integrated Security=True" providerName="System.Data.SqlClient" />
<add name="ConnectionString_PreStage" connectionString="Data Source=xxxxxxxx;Initial Catalog=yyyy;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
【问题讨论】:
LINQ 在内部使用循环,所以请不要假设 linq 没有循环 我真的很好奇“无循环”约束的来源。它经常显示为对问题的任意要求。有没有人在那里教学循环对性能不利或类似的东西?关键是,如果您有某种集合,则必须对其进行迭代。如果你不这样做,或者如果你调用隐藏它的方法,最后 CPU 仍然迭代地执行指令来处理每个集合元素。所以请详细说明。 【参考方案1】:假设Environments
实现IEnumerable<string>
,Dictiorary
是 Dictioary<string, string>
-
基于 linq 的解决方案是这样的:
Environments.ToDictionary(
k => k,
v => ConfigurationManager.ConnectionStrings[$"ConnectionString_v"].ToString()
);
请注意,ToDictionary
与大多数(如果不是全部)其他 linq 方法一样,在内部使用 forech
- 所以它并不是真正的“没有循环”。
【讨论】:
【参考方案2】:你可以这样做
Dictionary<string, string> dCs = new Dictionary<string, string>();
var allConnectionStrings = ConfigurationManager.ConnectionStrings;
foreach(ConnectionStringSettings cs in allConnectionStrings)
dCs.Add(cs.Name, cs.ConnectionString);
【讨论】:
以上是关于从Web.Config获取多个connectionStrings到字典c#没有循环的主要内容,如果未能解决你的问题,请参考以下文章
转载 How to Encrypt connection string in web.config
vs项目发布时提示类似Default-Web.config Connection String”参数不能为 Null 或空的报错问题