2013-06-14 10 views
11

Mam trzy projekty (projekty WCF, nie klienci), mam jedną bazę danych dla wszystkich, teraz jak będę używać EF w tym? czy powinienem zrobić czwarty projekt, który będzie miał kontekst db i podmioty, a następnie dodać odniesienie do niego we wszystkich trzech projektach? czy powinienem mieć osobny kontekst dla każdego projektu i po prostu dodać tabele potrzebne do każdego projektu? niektóre ze stołów są naprawdę używane wszędzie. więc jakie jest najlepsze rozwiązanie?Mam trzy projekty, które dzielą ten sam DB, jaki jest najlepszy sposób korzystania z EF we wszystkich?

Kolejne pytanie: czy powinienem ujawnić kontekst EF db w oddzielnym projekcie, aby inne projekty mogły uzyskać do niego dostęp? coś w stylu:

MySeparateProject myPr = new MySeparateProject(); 
using (var db = new myPr.DBContext()) 
{ 
    // do stuff with entities 
    db.SaveChanges(); 
} 

Odpowiedz

17

myślę najczystsze rzeczą do zrobienia jest stworzenie projektu dostępu do danych (biblioteka klasa), który zawiera tylko swoje modele i kontekst db, a odniesienie, że od wszystkich innych projektów.

Niektórzy ludzie powiedzą, że powinieneś stworzyć jedną bibliotekę klas tylko z modelami, a następnie mieć jeszcze inną, która ma DbContext i mieć klasy repozytoriów, a następnie .... Czuję, że to przesada dla większości projektów. Posiadanie modeli i kontekstów w jednym miejscu sprawia, że ​​bardzo łatwo można synchronizować wszystkie zależne projekty, jeśli chodzi o dostęp do danych.

Oto typowa struktura projektu dla mnie:

enter image description here

Tutaj Squelch.Data zawiera wszystkich moich modeli i kontekstach dB Squelch.Core zawiera podstawową logikę biznesową, a moje dwa "aplikacje" (Squelch.Portal ad CdrImport), a także różne przypadki testowe, wszystkie odnoszą się do tych bibliotek klasy podstawowej.

+0

Tak naprawdę, dla lepszego dostrojenia, bez przesady (i overswatowania na Migracje, jeśli najpierw przejdziesz z bazą danych) byłby DAL z kontekstami i modelami encji, a następnie biblioteką modeli dla twoich bibliotek BLL, z której ma korzystać warstwa aplikacji. – Shockwaver

3

Chciałbym utworzyć oddzielny projekt dostępu do danych. Dobrą praktyką jest oddzielanie warstwy danych. W zależności od charakteru projektu i sposobu jego testowania, możesz rzucić okiem na coś podobnego do wzorca repozytorium (chociaż debata na temat jego wartości z EF).

http://msdn.microsoft.com/en-us/library/ff649690.aspx

+0

Właściwie to, co było w mojej głowie, EF i wzór repozytorium to rodzaje podwójnej pracy ... –

Powiązane problemy