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

c# data-access-layer entity-framework n-tier

Вопрос

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

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

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

Спасибо

Принятый ответ

Вы можете скопировать строку подключения, созданную в 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" />

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


Популярные ответы

В моем случае, хотя я использую 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);
}

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



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow