Как совместно использовать экземпляр LocalDB для всех проектов в решении?

У меня есть настройка решения VS 2012 следующим образом:

  • Модельный проект EF
  • Тестовый проект модели EF
  • Приложение ASP.NET MVC 4
  • Проект служб данных WCF

Во время разработки я хочу использовать LocalDB в качестве резервной базы данных для EF. Оба проекта MVC и WCF используют модель EF для доступа к данным в базе данных. Я хотел бы использовать один и тот же экземпляр LocalDB во всех проектах (MVC, WCF и Test), но не могу правильно настроить web.config.

Я также хотел бы, чтобы эта настройка проекта была переносимой между машинами разработчиков, IE без абсолютных путей.

Тестовый проект создает и работает с базой данных в c:\users\\.mdf. Проекты MVC и WCF ожидают, что файл будет находиться в папке AppData. Я вручную копировал его по мере необходимости, но очевидно, что когда приложения изменяют данные, они теряют синхронизацию.

Любые предложения или примеры того, как настроить проекты для совместного использования одного и того же экземпляра с относительными путями?


person Chris DaMour    schedule 11.04.2013    source источник


Ответы (3)


Собрав пример для minhcat_vo, я нашел решение.

Проблема, с которой я столкнулся, возникла, когда вы не указали явную строку подключения, соответствующую имени производного типа DbContext (или тому, что вы установили в качестве аннотации). Поведение отличается для разных типов проектов:

  • В тестовом проекте он использует локальный каталог БД с полным доменным именем вашего DbContext с файлом MDF, расположенным по адресу \\.mdf.
  • В проекте ASP.NET MVC он пытается загрузить mdf из \app_data\.mdf

Я наткнулся на решение при переносе моего проекта EF на MySQL. Поставщик MySQL EF ни при каких обстоятельствах не будет возвращаться к строке подключения DefaultConnection (я думаю, если только ваш DbContext не выбрал ее явно). Чтобы заставить MySQL-EF работать, мне пришлось ввести строку подключения, соответствующую контексту. Это подтолкнуло меня к ответу, который я искал. Используя следующую строку подключения для всех моих проектов, все они используют один и тот же файл MDF/экземпляр LocalDB:

<add name="ThingsContext" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=Things;Integrated Security=SSPI" />

Где ThingsContext — это экземпляр DbContext для моего проекта. Вы можете увидеть мой пример решения @ https://github.com/drdamour/SharedLocalDB

person Chris DaMour    schedule 18.04.2013
comment
Я попробовал ваше решение. Работает, теперь вопрос, где находится файл? MDF можно добавить в систему управления версиями (например, GIT), например, решение использует удаленную БД. Это как использовать SQL Express... - person firepol; 05.01.2015
comment
Именно то, что я искал, спасибо. @firepol Мой файл находился по адресу c:\Users\myusername\mydatabasename.mdf. В Visual Studio в обозревателе объектов Sql Server откройте свойства базы данных. Путь указан в разделе Текущие параметры подключения. - person Miguel Hughes; 10.05.2017

Я хотел бы использовать один и тот же экземпляр LocalDB во всех проектах (MVC, WCF и Test), но не могу правильно настроить web.config

Вероятно, это ваша проблема со строкой подключения.

Любые предложения или примеры того, как настроить проекты для совместного использования одного и того же экземпляра с относительными путями?

Да, вы можете использовать относительные пути в файле web.config каждого проекта. Однако вы можете справиться с этим с помощью ConfigurationManager.

person cat_minhv0    schedule 11.04.2013
comment
Можете ли вы привести пример того, что вы предлагаете. Я бы предпочел ограничить реализацию файлами .config. - person Chris DaMour; 15.04.2013
comment
Я думаю, что это был бы хороший пример вашего случая. stackoverflow.com/a/1541978/861114 - person cat_minhv0; 16.04.2013
comment
Я думаю, вам нужно попробовать делать то, что вы говорите, потому что это не так просто, как вы предполагаете. разные типы проектов, похоже, хотят строку подключения по-разному. я постараюсь поделиться примером проекта - person Chris DaMour; 16.04.2013

Я могу ошибаться, одна локальная БД может одновременно иметь доступ только к одному приложению. Если вы хотите, чтобы к одной базе данных могли одновременно обращаться несколько приложений, подключите LocalDB к SQL-серверу экспресс-выпуска. Создайте пользователя в экспрессе, используя аутентификацию формы для каждого приложения. Измените ConnectionString, чтобы выразить sql с именем пользователя и паролем. Вы можете идти.

person vierx    schedule 25.04.2013