2009-05-13 5 views
7

Używam warstwową architekturę z Entity Framework, jak mój dataLayer z bandą na górze repozytoriów zawierających LINQ-podmioty zapytań. Warstwa danych to jeden projekt, obok której mam warstwę Usługi i interfejs, którym jest strona internetowa.Entity Framework - Layered Design - Gdzie umieścić connectionstring?

Chcę moja strona będzie odpowiedzialny za określenie ConnectionString dla mojego modelu jednostki. Jak mam to zrobic?

Używam metody singleton, aby dostać się do mojego repozytorium podmiot, który znajduje się wewnątrz dataLayer.

Dzięki

Odpowiedz

9

Możesz skopiować ciąg połączenia utworzony w App.Config zestawu DAL do sekcji connectionStrings pliku web.config.

Możesz zachować ciąg połączenia w dll zespołu, ale nie należy wdrażać go ze stroną internetową.

Musisz skopiować cały ciąg połączenia. Powinno to wyglądać następująco:

<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" /> 

Powinien zawierać wszystkie informacje o tym, gdzie znajdują się pliki odwzorowań.

+0

Odtworzyłem mój model podmiotu i spróbowałem ponownie, a teraz działa, dzięki! – Peter

3

W moim przypadku, chociaż używam L2S zamiast L2e, ale zalecenie powinno znieść. Mam generalizować bibliotekę Config, która jest pobierana z pliku XML. Gdy wymagany jest kontekst danych, każdy obiekt danych ma następującą metodę. Oczywiście, jeśli chcesz, możesz go łatwo wymodelować.

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

    return new CalendarsAndListsDataContext(_conStr); 
} 

Obecnie największą wadą jest to, że zmiany w łańcuchu połączeń wymagają ponownego uruchomienia aplikacji, ale w moim przypadku nie stanowi to problemu.

+0

Podoba mi się pomysł oddzielenia konfiguracji w dodatkowym projekcie. Ale dla tej aplikacji chcę, aby moja strona internetowa była odpowiedzialna za połączenie. – Peter

+0

Cóż, nie ma powodu, dla którego twoja warstwa Cofiguration musi być tylko do odczytu. Możesz zrobić to odczytać/zapisać, więc możesz zrobić coś takiego jak COnfigurationLibrary.Config.AddSetting ("ConnectionString", "MyString"). Wtedy Twoja witryna może nadal prowadzić ciąg połączenia. – Serapth