如何在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服务器。它是在localhost/SQLEXPRESS上创建的。

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,则将使用默认的EF,该EF使用本地SQL Express。

最新更新