Как контролировать имя сервера в EF CF?
Я создал инициализатор DBContext:
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, в котором новый контекст будет создавать базу данных. Он создается на локальном хосте /SQLEXPRESS.
2 ответа
DbContext
Класс необязательно принимает строку соединения в качестве параметра конструктора, что означает, что вы можете программно построить строку соединения, используя класс System.Data.SqlClient.SqlConnectionStringBuilder.
Вот пример на C# (я знаю, что ваш пример находится на vb.net, но перевод должен быть достаточно простым, и это должно иллюстрировать подход):
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;
}
}
Вы управляете им в строке подключения, передаваемой в ваш контекст или определяемой в вашем файле конфигурации. Если вы не используете какой-либо EF, вы будете использовать тот, который по умолчанию использует локальный SQL Express.