0

私が適切なグーグルをするのに愚かすぎたかどうかはわかりませんが、これに対する解決策は見つかりませんでした:

ado.net Frameworkを使用した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.csData-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プロジェクトに関連しないプロジェクトがある場合(私の場合はテストプロジェクトでした)、関連する構成ファイルにアプリ設定を追加する必要があります(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 に答える