0

我不知道我是否变得太愚蠢而无法进行适当的谷歌搜索,但我没有找到解决方案:

我有一个带有 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=&quot;server=x.x.x.x;User Id=user;password=1234;database=db;port=8888;Persist Security Info=True&quot;" 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)。

完毕。

4

1 回答 1

0

在您的 web.config 中:

<configuration>
  <connectionStrings configSource="connectionString.config" />
</configuration>

在您的新文件 connectionString.config 中(这是该文件中唯一的代码!):

<connectionStrings>
  <clear />
  <add name="ConnectionStringName" connectionString="..." />
</connectionStrings>

或者像你正在做的那样:

<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>

然后连接你的字符串:

string appDbserver= ConfigurationSettings.AppSettings["dbserver"];
string appDbserverport= ConfigurationSettings.AppSettings["dbserverport"];
string appDbuser= ConfigurationSettings.AppSettings["dbuser"];
string appDbpassword= ConfigurationSettings.AppSettings["dbpassword"];

string myConnectionstring = @"metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=" + appDbserver + @";User Id=" + appDbuser + @";password=" + appDbpassword + @";database=db;port=" + appDbserverport + @";Persist Security Info=True&quot;"
于 2012-12-02T20:52:56.700 回答