Как контролировать имя сервера в 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.

Другие вопросы по тегам