Переключение строк подключения в зависимости от среды с EF 4.1 / DbContext - PullRequest
4 голосов
/ 15 сентября 2011

Я видел несколько постов по этому поводу, но не смог создать полезное решение из ответов. Возможно, из-за отсутствия понимания.

Предоставляемый хостинг требует, чтобы при подготовке и производстве использовалась идентичная кодовая база, включая строку подключения.

Как переключить строку подключения для DbContext?

Я понимаю, что могу сделать что-то вроде этого:

public FooEntities() : base("ApplicationServices") { }

Но это не динамично - оно просто устанавливает его во время выполнения.

Так как же я на самом деле ВЫБЕРИТЕ строку подключения во время выполнения?

Ответы [ 2 ]

5 голосов
/ 23 ноября 2011

Да public FooEntities() : base("ApplicationServices") { }

FooEntities наследование от ObjectContext

Вы также можете написать

public FooEntities() : base(YourStaticMethodToGetConnectionString()) { }

Затем вы можете извлечь строку подключения из Интернета.config на основе некоторых настроек среды

0 голосов
/ 27 февраля 2015

Я рассматриваю это прямо сейчас, потому что я буду разрабатывать локально, а затем развертывать в облаке.Следовательно, вы хотите динамически переключать строки подключения, используемые контекстом данных.Я планирую настроить необходимые строки подключения в стандартном разделе «connectionStrings» файла Web.config, а затем поместить логику в конструктор DbContext, например:

public partial class MyApplicationDbContext : DbContext
{
    public MyApplicationDbContext()
        : base("name=cloud")
    {
        Database.Connection.ConnectionString = 
            ConnectionStringHelpers.GetHostBasedConnectionString();
    }

    // abbreviated..
}

Alternate:

public partial class MyApplicationDbContext : DbContext
{
    public MyApplicationDbContext()
        : base(ConnectionStringHelpers.GetHostBasedConnectionString())
    {
    }

    // abbreviated..
}

Помощник:

public class ConnectionStringHelpers
{
    public static string GetHostBasedConnectionString()
    {
        return GetConnectionStringByName(GetHostBasedConnectiongStringName());
    }

    public static string GetHostBasedConnectiongStringName()
    {
        switch (System.Net.Dns.GetHostName())
        {
            case "myHostname": return "local";   // My local connection
            case "ip-ABCD123": return "cloud";   // Cloud PaaS connection
            default: return "cloud";
        }           
    }

    public static string GetConnectionStringByName(string name)
    {
        return ConfigurationManager.ConnectionStrings[name].ConnectionString;
    }
}

И в моем файле Web.config:

<connectionStrings>
    <add name="local" connectionString="..." providerName="System.Data.SqlClient" />
    <add name="cloud" connectionString="..." providerName="System.Data.SqlClient" />
</connectionStrings>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...