Подключение к нескольким базам данных в веб-приложении MVC

2

Как подключиться к различным базам данных для веб-приложения .NET MVC, написанного на С#?

Здесь структура таблицы базы данных остается прежней. Все, что меняется, - это имя базы данных. Итак, как мне вручную подключиться к базе данных или использовать изменить строку подключения?

Фокус в том, чтобы использовать тот же код. В зависимости от URL я хочу, чтобы данные отображались из разных баз данных. Таким образом, Views и Controller (в значительной степени) имеют один код w.r.t. модель.

-Datte

  • 1
    Как вы подключаетесь к базе данных? ADO.NET? LINQ to SQL? Entity Framework? NHibernate? Что-то другое?
  • 0
    Да, я использую Entity Framework ...
Теги:
entity-framework
asp.net-mvc
database-connection

1 ответ

8

Вот очень простой способ сделать то, что, я думаю, вы просите. В файле web.config вы можете определить две строки подключения:

<connectionStrings>
    <add name="DevelopmentDB" providerName="System.Data.SqlClient"
        connectionString="Data Source=sql-dev.example.com;Initial Catalog=MyDB;User Id=MyUser;Password=MyPassword" />
    <add name="ProductionDB" providerName="System.Data.SqlClient"
        connectionString="Data Source=sql-prod.example.com;Initial Catalog=MyDB;User Id=MyUser;Password=MyPassword" />
</connectionStrings>

Затем в вашем (базовом) контроллере вы можете создать метод, который возвращает соответствующую строку соединения на основе запроса, например:

internal string ConnectionString
{
    get
    {
        return getConnectionStringByServerName(this.HttpContext.Request.ServerVariables["SERVER_NAME"]);
    }
}

internal string getConnectionStringByServerName(string serverName)
{
    if (serverName.Equals("localhost"))
    {
        return WebConfigurationManager.ConnectionStrings["DevelopmentDB"].ConnectionString;
    }
    else
    {
        return WebConfigurationManager.ConnectionStrings["ProductionDB"].ConnectionString;
    }
}

Вы могли бы, конечно, изменить критерии выбора для того, что имеет наибольший смысл.

Удачи!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню