MVC5 EF6 CodeFirst использует две базы данных для отладки и выпуска

asp.net-mvc asp.net-mvc-5 c# entity-framework entity-framework-6

Вопрос

У меня есть проект веб-сайта для моей компании. Я использую MVC5 с Entity Framework 6 в проекте Code First.

Это Intranet для моей компании, поэтому я хочу две базы данных. 1 в производстве (выпуск). 1 в dev (Debug).

Я редактировал файлы Web.config, Web.Debug.config и Web.Release.config следующим образом:

Web.Config

<connectionStrings>
    <add name="Connexion" connectionString="Data Source=[MYSQLSERVER];Initial Catalog=Intranet;Persist Security Info=True;User ID=[MYUSER];Password=[MYPASS]" providerName="System.Data.SqlClient"/>
</connectionStrings>

Web.Debug.Config

<connectionStrings>
    <add name="Connexion" connectionString="Data Source=[MYSQLSERVER];Initial Catalog=Intranet;Persist Security Info=True;User ID=[MYUSER];Password=[MYPASS]" providerName="System.Data.SqlClient"
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>

Web.Release.config

<connectionStrings>
    <add name="Connexion" connectionString="Data Source=[MYSQLSERVER];Initial Catalog=IntranetRelease;Persist Security Info=True;User ID=[MYUSER];Password=[MYPASS]" providerName="System.Data.SqlClient"
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>

Когда я развертываю свой проект с помощью Web Deploy в модуле выпуска, все задания выполняются, и окончательный Web.Config имеет хорошее значение IntranetRelease для каталога.

Моя проблема в том, что мой сайт не работает, потому что база данных IntranetRelease не обновляется из базы данных Intranet .

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

Я пробовал в своем проекте сделать Add-Migration xxx в режиме выпуска, но ничего не меняет.

Цель состоит в следующем:

Когда интрасеть выпуска работает, я работаю над базой данных dev. Когда все мои изменения хороши для выпуска, я хочу развернуть новую версию с помощью Web Deploy и do something чтобы обновить базу данных IntranetRelease с моими изменениями, не потеряв при этом никаких данных.

Спасибо за помощь и извините за мой бедный английский.

Принятый ответ

Вы можете использовать Migrations для этого, но вы должны быть осведомлены о том, что делает миграция.
Таким образом, у вас есть две базы данных Dev и Release, где база данных Dev имеет текущее состояние, а в базе данных выпуска есть состояние, вероятно, старше этого.

Вы создаете миграцию в Dev-Database, а затем запускаете код в базе данных выпуска (я бы рекомендовал не делать этого с веб-сайта, так как ему нужны права на использование ddl-команд). Вы можете архивировать это, например, запустив консольную программу, которая проверяет и обновляет базу данных.

Итак, как это сделать в несколько простых шагов:

  1. Создайте ConnectionString в вашем Config-файле (это будет база данных Developer-Database)
  2. Создайте ConncetionString в вашем Release.Config-файле (используйте SlowCheeta, если App.Config это будет база данных Production)
  3. Создайте DatabaseModel в Dev.
  4. Используйте Add-Migration «SomeNameGoesHere» для создания миграции из текущей базы данных в вашу модельную базу данных.
  5. При создании Release EF позаботится о том, чтобы вы перенести базу данных Release в желаемую (например, состояние, определяемое моделью). НЕ ИСПОЛЬЗУЙТЕ ОБНОВЛЕНИЕ БАЗЫ ДАННЫХ ДЛЯ БАЗЫ ПРОДУКЦИИ.

Используйте функции Up () и Down () для сохранения данных во время миграции (EF будет обнаруживать, если вы потеряете данные и будете предупреждать вас)

Чтобы узнать больше о посещении темы, посетите http://msdn.microsoft.com/en-us/data/jj591621.aspx.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему