Первая миграция кода со строками подключения

Итак, мне удалось запустить Code First, и он отлично работает.

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

Я следил за Официальное сообщение в блоге, и эта команда Update-Database заработала.

Однако при этом обновляется только версия базы данных SQLExpress. Производственная версия базы данных находится в Azure, и я указываю строку подключения во время выполнения, поэтому команда Update-Database не работает с этим.

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


person Dragonseer    schedule 25.02.2012    source источник
comment
Для тех, кто проверяет НЕТ app.config и не использует консоль PM, см. Этот пост stackoverflow.com/questions/15504465/   -  person phil soady    schedule 22.04.2013


Ответы (2)


В консоли диспетчера пакетов введите:

Get-Help Update-Database

Соответствующая часть:

    Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] [-ConnectionStringName <String>] [<Com
monParameters>]

Итак, вы можете сделать Update-Database -ConnectionStringName "MyConnectionString", и он должен работать как шарм.

У вас также есть инициализатор базы данных MigrateDatabaseToLatestVersion, если вы установите его (через Database.SetInitializer()), когда вы развертываете свое приложение на производстве с правильной строкой подключения, при первом доступе к базе данных он должен автоматически перенести вашу базу данных на последнюю версию.

Я предлагаю осторожность, всегда делайте резервные копии.

Обновлять

Недавние комментарии @Alexy Strakh породили еще один аргумент, который стоит включить в ответ.

Правильная настройка системы развертывания с использованием Code First Migrations, учитывая 2 ConnectionString.

  1. Определите строки подключения в web.config (prod и dev) с паролями по умолчанию
  2. Сообщите системе конфигурации вашего приложения о конфигурациях подключения prod и dev, при желании создайте модульные тесты, чтобы убедиться, что выбран правильный *
  3. Используйте преобразование файла конфигурации и получите его преобразовать ваш web.config в файл с производственными значениями
  4. Разверните свой пакет в производственной среде (это должно быть наиболее урезанным край пути)

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

Другой вариант - просто использовать Web.Debug.config и Web.Release.config и иметь центральный шаблон для основного файла web.config (который будет единственным, который вы регистрируете в системе управления версиями).

Только никогда не проверяйте производственные пароли или пароли для личного развития (если таковые имеются).

* Вы можете использовать символ DEBUG, чтобы проверить, как работает приложение.

person WDRust    schedule 25.02.2012
comment
У меня есть база данных dev, указанная в моем соединении по умолчанию web.config и prod db, указанное в web.release.config. Я хочу использовать prod вместо dev, могу я это сделать? - person Alexey Strakh; 08.05.2016
comment
Да, во что бы то ни стало, но помните, что знание логики вашей конфигурации для разработки / постановки / производства НЕ входит в обязанности структуры сущностей (или любой технологии хранения). Я думаю, что вам нужно, это преобразование файла конфигурации. msdn.microsoft.com/en-us/ библиотека / dd465318% 28v = vs.100% 29.aspx - person WDRust; 09.05.2016
comment
То есть, если вы хотите пойти по этому пути. Если у вас есть дополнительные сведения или требования, вы должны задать другой вопрос (не стесняйтесь пинговать меня) - person WDRust; 09.05.2016
comment
Думаю, мой вопрос не был конкретным, позвольте мне попытаться сообщить некоторые подробности. У меня есть проект asp.net с кодом EF6.1 и переносом данных. У меня две конфигурации: dev, prod. Конфигурация dev определяется в web.config. Я также определил файл преобразования для моей prod конфигурации, поэтому каждый раз, когда я переключаюсь на конфигурацию prod, применяется преобразование. Проблема в том, что диспетчер nuget, когда я вызываю update-database, продолжает использовать мою конфигурацию dev, даже если я переключился на prod. Поэтому мне нужно открыть web.config (по умолчанию) и временно определить там соединение с базой данных prod. - person Alexey Strakh; 09.05.2016

Почему Entity Framework EF Migrations добавляет- На этапе миграции требуется строка подключения к базе данных?

Имеет решение, которое я считаю менее трудоемким в долгосрочной перспективе. Как будто вы создаете строку подключения с таким же именем

В вашем контексте: base ("DBName")

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

person P6345uk    schedule 11.01.2013
comment
Согласитесь, эта техника работает нормально, но есть загвоздка. Если вы выделили свою библиотеку доступа к данным в отдельный проект и не поместили правильную конфигурацию базы данных в свой проект по умолчанию, Add-Migration применит строку подключения по умолчанию ./SQLEXPRESS. Мне удалось обойти эту проблему, поместив информацию о строке подключения в файл проекта app.config по умолчанию. Это странное поведение, потому что я изменил проект по умолчанию в консоли диспетчера пакетов на свой проект доступа к данным. Но Visual Studio 2017, похоже, проигнорировал этот факт при поиске подключения к БД. - person Jeff; 19.09.2018
comment
У вас есть пример того, как это происходит, если да, я посмотрю. Возможно, Visual Studio 2017 немного отличается. Конфигурационный файл, который он использует из памяти, взят из запускаемого проекта, и он игнорирует конфигурационный файл в подпроекте. - person P6345uk; 19.09.2018