Первые миграции кода у меня работали очень хорошо. У меня есть проект услуг и проект wpf. Модель находится в проекте служб, на который ссылается проект wpf. Обновление базы данных выполняется в проекте служб, но используется строка подключения из проекта wpf. Теперь я добавляю веб-проект, который также ссылается на сервисный проект. Итак, теперь, когда в app.config есть строка подключения, а в web.config есть строка подключения, какую из них она будет использовать?
Первая миграция кода — какая строка подключения будет использоваться?
Ответы (2)
В моем сценарии файл app.config в проекте служб игнорируется. При первой миграции кода будет использоваться либо файл app.config из проекта WPF, либо файл web.config в веб-проекте, в зависимости от того, какой из них выбран в качестве запускаемого проекта.
person
Shumii
schedule
04.02.2014
@Shumii, спасибо! Ваши комментарии спасли меня. Когда я пытался включить миграцию, у меня всегда была ошибка Сервер не найден или недоступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен на разрешение удаленных подключений. На самом деле подключение было правильным. Проблема заключалась в том, что проект запуска решения настраивается на проект, у которого нет app.config. После настройки стартового проекта на проект, который содержит правильный app.config, миграция работает!
- person Qixing; 20.03.2014
Вот это да. Даже не подумал, что причина в этом. Хорошая находка!!
- person xximjasonxx; 12.09.2014
Сводит с ума ... понятия не имел, что стартовый проект повлияет на то, что происходит в консоли диспетчера пакетов. Спасибо.
- person Robert Van Hoose; 22.01.2015
Вы можете использовать параметры -ProjectName, -StartupProjectName, -ConnectionStringName и -ConnectionString, чтобы переопределить поведение по умолчанию. См. stackoverflow.com/questions/25013790/.
- person Jared; 01.07.2015
Это нелепо. Я добавил новый проект рабочей роли, и по умолчанию он был установлен как стартовый проект. Теперь всякий раз, когда я выполнял добавленную миграцию, он создавал все таблицы в моем контексте с нуля, и я понятия не имел. Ваш ответ спас мой день :)
- person Ali Baig; 25.02.2016
При выполнении update-database
вы должны указать проект, содержащий миграции. Убедитесь, что в этом проекте есть файл app.config
, содержащий правильную строку подключения.
вы можете сделать Update-Database -ConnectionStringName "MyConnectionString"
, и он должен работать как чудо.
person
Sirwan Afifi
schedule
03.02.2014
То, что вы сказали, правильно и соответствует официальной документации. Однако в моем случае app.config в проекте служб игнорируется, и при указании строки подключения он сообщает мне, что он не существует. Единственные строки подключения, которые он видит, находятся в app.config проекта WPF. Я предполагаю, что WPF app.config переопределяет проект сервисов. Не объясняет, почему строки подключения в файле web.config полностью игнорируются.
- person Shumii; 04.02.2014
вы можете установить имя строки подключения как полное пространство имен
<add name="YourClassProject.EfDbContext" ...
- person Sirwan Afifi; 04.02.2014
или вы можете создать свой DbContext с передачей имени строки подключения конструктору:
public EfDbContext(): base("nameOfYourConnectionString")
- person Sirwan Afifi; 04.02.2014
Спасибо, я знаю об этих разных способах сделать это, но мой вопрос заключается в том, что произойдет в очень конкретном сценарии, когда вы не укажете имя соединения и оставите его по умолчанию.
- person Shumii; 04.02.2014
если вы не укажете имя строки подключения, оно использует имя строки подключения, имя которого совпадает с именем вашего контекста.
- person Sirwan Afifi; 04.02.2014
все что вы говорите правда, но так и не ответили на мой вопрос.
- person Shumii; 04.02.2014
@SirwanAfifi, ты, кажется, упускаешь из виду точку зрения Шуми. Дело не в том, какое имя строки, а в том, какой файл конфигурации. Одно и то же имя может встречаться во многих конфигурационных файлах, поэтому простое указание имени не является ответом.
- person ProfK; 11.12.2014