Entity Framework - многослоен дизайн - Къде да поставите низ за връзка?

Използвам слоеста архитектура с Entity Framework като мой слой данни с куп хранилища отгоре, които съдържат заявките Link-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