如何在EF CF中控制服务器名称?

时间:2012-03-07 09:50:56

标签: .net sql-server vb.net ef-code-first server-name

我创建了一个DBContext Initializer:

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上创建。

2 个答案:

答案 0 :(得分:0)

您可以在传递给您的上下文或在配置文件中定义的连接字符串中控制它。如果您不使用任何EF,将使用使用本地SQL Express的默认值。

答案 1 :(得分:0)

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;
    }
}