我不知道我是否变得太愚蠢而无法进行适当的谷歌搜索,但我没有找到解决方案:
我有一个带有 ado.net 框架的 asp.net 应用程序,因此有一个连接字符串。
我的连接字符串存储在 Web.config 中,如下所示:
<connectionStrings>
<add name="Entities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=MySql.Data.MySqlClient;provider connection string="server=x.x.x.x;User Id=user;password=1234;database=db;port=8888;Persist Security Info=True"" providerName="System.Data.EntityClient"/>
</connectionStrings>
我必须将解决方案提供给某些人,如果他们不得不深入研究这个连接字符串并更改那里的所有设置(它只是没有“清晰地安排”在那里),我觉得这会很烦人,如果我可以在字符串之外声明它们,可能像这样(在同一个文件中,或者如果可能的话也在另一个名为“dbsettings”的文件中,并将此文件包含在 web.config 中):
<appSettings>
<add key="dbserver" value="x.x.x.x" />
<add key="dbserverport" value="8888" />
<add key="dbuser" value="user" />
<add key="dbpassword" value="1234" />
</appSettings>
我希望你明白我在说什么。
解决方案
首先查看 ChiYoung 的答案 - 他几乎说了所有话,但无论如何这里详细说明我是如何做到的:
在Web.config
我添加了这个(在该configuration
部分内部):
<appSettings>
<add key="dbserver" value="x.x.x.x" />
<add key="dbserverport" value="8888" />
<add key="dbname" value="dbxy" />
<add key="dbuser" value="user" />
<add key="dbpassword" value="1234" />
</appSettings>
然后我DatabaseHelper.cs
在我的Data
-Layer(项目)中创建了一个类,如下所示:
class DatabaseHelper
{
public static string MakeConnectionString()
{
string appDbserver = ConfigurationManager.AppSettings["dbserver"];
string appDbserverport = ConfigurationManager.AppSettings["dbserverport"];
string appDbuser = ConfigurationManager.AppSettings["dbuser"];
string appDbpassword = ConfigurationManager.AppSettings["dbpassword"];
string appDbname = ConfigurationManager.AppSettings["dbname"];
return @"metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=MySql.Data.MySqlClient;provider connection string=""server=" + appDbserver + @";User Id=" +
appDbuser + @";password=" + appDbpassword + @";database="+appDbname+@";port=" + appDbserverport + @";Persist Security Info=True""";
}
}
接下来我更改了我的DataModel.Designer.cs
文件(这个类继承自ObjectContext
并自动生成,因为我正在使用 Ado.net),我将生成的构造函数更改为:
public Entities() : base("name=Entities", "Entities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
至:
public Entities() : base(DatabaseHelper.MakeConnectionString(), "Entities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
如果您有一个与 Web 项目无关的项目 - 在我的情况下,它是一个测试项目,您必须将 appsettings 添加到相关的配置文件 ( App.config / Web.config
)。
完毕。