【问题标题】:How to control server name in EF CF?如何在 EF CF 中控制服务器名称?
【发布时间】:2012-03-07 09:50:56
【问题描述】:

我创建了一个 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 上创建的。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢!好吧,他们很好地隐藏了它,让构造函数接受一个字符串参数,该参数是数据库名称或连接字符串。
    • 是的 - 公平的评论 - 一个奇怪的“多态”字符串,可以是两件事之一。
    【解决方案2】:

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

    【讨论】:

    • 但是我如何将连接字符串传递给上下文。它不能在配置文件中,因为它取决于可用的服务器。
    • DbContext 接受连接字符串或连接作为其构造函数的参数。
    猜你喜欢
    • 2016-05-06
    • 1970-01-01
    • 2020-05-06
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 2011-05-24
    相关资源
    最近更新 更多