Первая миграция кода — какая строка подключения будет использоваться?

Первые миграции кода у меня работали очень хорошо. У меня есть проект услуг и проект wpf. Модель находится в проекте служб, на который ссылается проект wpf. Обновление базы данных выполняется в проекте служб, но используется строка подключения из проекта wpf. Теперь я добавляю веб-проект, который также ссылается на сервисный проект. Итак, теперь, когда в app.config есть строка подключения, а в web.config есть строка подключения, какую из них она будет использовать?




Ответы (2)


В моем сценарии файл app.config в проекте служб игнорируется. При первой миграции кода будет использоваться либо файл app.config из проекта WPF, либо файл web.config в веб-проекте, в зависимости от того, какой из них выбран в качестве запускаемого проекта.

person Shumii    schedule 04.02.2014
comment
@Shumii, спасибо! Ваши комментарии спасли меня. Когда я пытался включить миграцию, у меня всегда была ошибка Сервер не найден или недоступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен на разрешение удаленных подключений. На самом деле подключение было правильным. Проблема заключалась в том, что проект запуска решения настраивается на проект, у которого нет app.config. После настройки стартового проекта на проект, который содержит правильный app.config, миграция работает! - person Qixing; 20.03.2014
comment
Вот это да. Даже не подумал, что причина в этом. Хорошая находка!! - person xximjasonxx; 12.09.2014
comment
Сводит с ума ... понятия не имел, что стартовый проект повлияет на то, что происходит в консоли диспетчера пакетов. Спасибо. - person Robert Van Hoose; 22.01.2015
comment
Вы можете использовать параметры -ProjectName, -StartupProjectName, -ConnectionStringName и -ConnectionString, чтобы переопределить поведение по умолчанию. См. stackoverflow.com/questions/25013790/. - person Jared; 01.07.2015
comment
Это нелепо. Я добавил новый проект рабочей роли, и по умолчанию он был установлен как стартовый проект. Теперь всякий раз, когда я выполнял добавленную миграцию, он создавал все таблицы в моем контексте с нуля, и я понятия не имел. Ваш ответ спас мой день :) - person Ali Baig; 25.02.2016

При выполнении update-database вы должны указать проект, содержащий миграции. Убедитесь, что в этом проекте есть файл app.config, содержащий правильную строку подключения.
вы можете сделать Update-Database -ConnectionStringName "MyConnectionString", и он должен работать как чудо.

person Sirwan Afifi    schedule 03.02.2014
comment
То, что вы сказали, правильно и соответствует официальной документации. Однако в моем случае app.config в проекте служб игнорируется, и при указании строки подключения он сообщает мне, что он не существует. Единственные строки подключения, которые он видит, находятся в app.config проекта WPF. Я предполагаю, что WPF app.config переопределяет проект сервисов. Не объясняет, почему строки подключения в файле web.config полностью игнорируются. - person Shumii; 04.02.2014
comment
вы можете установить имя строки подключения как полное пространство имен <add name="YourClassProject.EfDbContext" ... - person Sirwan Afifi; 04.02.2014
comment
или вы можете создать свой DbContext с передачей имени строки подключения конструктору: public EfDbContext(): base("nameOfYourConnectionString") - person Sirwan Afifi; 04.02.2014
comment
Спасибо, я знаю об этих разных способах сделать это, но мой вопрос заключается в том, что произойдет в очень конкретном сценарии, когда вы не укажете имя соединения и оставите его по умолчанию. - person Shumii; 04.02.2014
comment
если вы не укажете имя строки подключения, оно использует имя строки подключения, имя которого совпадает с именем вашего контекста. - person Sirwan Afifi; 04.02.2014
comment
все что вы говорите правда, но так и не ответили на мой вопрос. - person Shumii; 04.02.2014
comment
@SirwanAfifi, ты, кажется, упускаешь из виду точку зрения Шуми. Дело не в том, какое имя строки, а в том, какой файл конфигурации. Одно и то же имя может встречаться во многих конфигурационных файлах, поэтому простое указание имени не является ответом. - person ProfK; 11.12.2014