web-dev-qa-db-ja.com

dbmlの接続文字列をapp.configにポイントします

Dbml.designer.csの接続文字列をapp.confの接続文字列にポイントすることはできますか?以下に、app.configを正常に指すコードを記述しました。

public leDataContext() : 
    base(ConfigurationManager.ConnectionStrings["leConnString"].ToString(), mappingSource)
    {
        OnCreated();
    }

ただし、テーブルを変更したりdbmlに追加したりすると、そのコードが自動的に置き換えられます。

 public leDataContext() : 
            base("Data Source=.\\SQLEXPRESS;AttachDbFilename=\"D:\\My Projects\\App_Data\\le.mdf\";Integrated Security=True;Connect Timeout=30;User Instance=True", mappingSource)
    {
        OnCreated();
    }

「接続」オプションを拡張しました。 「アプリケーション設定」をFalseに設定します

28
VeecoTech

Dbml.designer.csファイルを手動で変更しないでください。前述のように、テーブルなどを編集/追加すると書き換えられます。これの代わりに、.dbmlデザイナーファイルのConnectionプロパティをNoneに設定し、パラメーターなしのコンストラクターを使用して部分クラスを追加します。

public partial class leDataContext
{ 
   public leDataContext() : 
       base(ConfigurationManager.ConnectionStrings["leConnString"].ToString())
    {
        OnCreated();
    }    
}
40
Alex

これは、@ Alexの回答の拡張に似ています。

ステップ1 :. dbmlファイルの接続プロパティを「none」に設定します。

enter image description here

ステップ2:。dbmlファイルの既存の部分クラスと同じ名前で新しい個別の部分クラスを作成します。そして、パラメーターなしのコンストラクターを使用して、connectionStringプロパティを設定します。

public partial class DataClassesDataContext
{
  public DataClassesDataContext() : base(ConfigurationManager.ConnectionStrings["Dev-connString"].ConnectionString)
  {
    OnCreated();
  }
}

ステップ3:ほぼ完了です!最後に、以下に示すように、app.configファイルでconnectionStringを定義する必要があります。

<connectionStrings>

  <add
  name="Dev-connString"
  connectionString="Data Source=yasser-home;Initial Catalog=pp;Persist Security Info=True;User ID=sa;Password=gogole"
  providerName="System.Data.SqlClient" />

</connectionStrings>

コードを再コンパイルしなくても、app.configファイルからconnectionStringを簡単に変更できるようになりました。

個別の部分クラスを作成したのはなぜですか?既存のDbml.designer.csファイルを編集できませんか?

Dbml.designer.csファイルは、テーブルやストアドプロシージャなどを追加/編集/削除すると書き換えられるため、手動で変更しないでください。

49
Yasser