2012-03-07 2 views
0

私はDBContextイニシャライザ作成:私は理解しない何EF CFでサーバー名を制御する方法は?

Public Class DropCreateInitializer(Of T As DbContext) 
    Inherits DropCreateDatabaseIfModelChanges(Of T) 
    Protected Overrides Sub Seed(context As T) 
     context.Database.ExecuteSqlCommand("CREATE INDEX IX_EXPLAN ON DBO.EXPLANS (PROGNAME, BIND_TIME, ACCESSNAME)") 
    End Sub 
End Class 

は、新しいコンテキストが上にデータベースを作成するSQLサーバーを制御する方法です。 localhost/SQLEXPRESSで作成されます。

答えて

0

DbContextクラスは、オプションで接続文字列をコンストラクタパラメータとして受け取ります。つまり、System.Data.SqlClient.SqlConnectionStringBuilderクラスを使用してプログラムで接続文字列を構築できます。

public class MyContext : DbContext 
{ 
    public MyContext(string serverName, string databaseName) 
     : base(GetConnectionString(serverName, databaseName)) 
    { 

    } 

    private static string GetConnectionString(string serverName, string databaseName) 
    { 
     var connectionBuilder = new SqlConnectionStringBuilder 
     { 
      DataSource = serverName, 
      InitialCatalog = databaseName, 
      IntegratedSecurity = true 
     }; 

     var connectionString = connectionBuilder.ToString(); 
     return connectionString; 
    } 
} 
+1

ありがとう!彼らは、DB名または接続文字列のいずれかである文字列パラメータを受け入れるコンストラクタを持っているので、それを隠すのにうってつけでした。 – GilShalit

+0

はい - 公平なコメント - それは2つのうちの1つになり得る不思議な "多型"の文字列です。 –

0

コンテキストに渡された接続文字列、または設定ファイルで定義された接続文字列で制御します。 EFを使用しない場合は、ローカルSQL Expressを使用するデフォルトのものを使用します。

+0

しかし、どのように、私は合格しない:ここで

はC#(私はあなたのサンプルはvb.netであるが、翻訳が十分に単純であるべきであり、これはアプローチを説明する必要があります知っている)で、一例であり、接続文字列をコンテキストに追加します。これは、使用可能なサーバーに依存するため、構成ファイルに入れることはできません。 – GilShalit

+0

DbContextは、コンストラクタへのパラメータとして接続文字列または接続を受け入れます。 –

関連する問題