Entity Framework - многоуровневый дизайн - куда поместить строку подключения?

Я использую многоуровневую архитектуру с Entity Framework в качестве уровня данных с кучей репозиториев наверху, которые содержат запросы Linq-To-Entities. Уровень данных - это один проект, рядом с которым у меня есть уровень служб и интерфейс, который представляет собой веб-сайт.

Я хочу, чтобы мой веб-сайт отвечал за определение строки подключения для моей модели сущности. Как мне это сделать?

Я использую одноэлементный метод для доступа к своему репозиторию сущностей, который находится внутри слоя данных.

Спасибо


person Peter    schedule 13.05.2009    source источник


Ответы (2)


Вы можете скопировать строку подключения, созданную в App.Config сборки DAL, в раздел connectionStrings файла web.config.

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

Вам нужно будет скопировать всю строку подключения. Должно получиться так:

<add name="DataEntities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=xxx;Initial Catalog=xxx;User Id=xxx;Password=xxx;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

Он должен включать всю информацию о том, где существуют файлы сопоставления.

person TGnat    schedule 13.05.2009

В моем случае, хотя я использую L2S вместо L2E, но рекомендация должна оставаться в силе. У меня есть обобщенная библиотека Config, которая питается из файла XML. Когда требуется контекст данных, у каждого объекта данных есть метод, подобный следующему. Конечно, при желании его можно было бы легко создать по шаблону.

private static string _conStr = null;
private static CalendarsAndListsDataContext GetDataContext()
{
    if (_conStr == null)
    {
        _conStr = ConfigurationLibrary.Config.Settings().GetConnectionString("liveConString");
    }

    return new CalendarsAndListsDataContext(_conStr);
}

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

person Serapth    schedule 13.05.2009
comment
Мне нравится идея того, как вы разделяете свою конфигурацию в дополнительном проекте. Но для этого приложения я хочу, чтобы мой веб-сайт отвечал за строку подключения. - person Peter; 13.05.2009
comment
Что ж, нет причин, по которым ваш уровень конфигурации должен быть доступен только для чтения. Вы могли бы сделать это для чтения / записи, тогда вы могли бы сделать что-то вроде COnfigurationLibrary.Config.AddSetting (ConnectionString, MyString). Тогда ваш сайт все еще может управлять строкой подключения. - person Serapth; 13.05.2009