Jakiś czas temu napisałem poniższe, ale ostatnio przyjechałem je przejrzeć i nie sądzę, żeby to był dobry projekt.
Projekt jest dla pewnego rodzaju modułowej warstwy bazy danych przy użyciu Entity Framework 4. Istnieje jeden obiekt bazy danych, który ładuje (leniwie) konteksty struktury encji z bibliotek zewnętrznych w określonej lokalizacji, a instancje załadowanych kontekstów są przechowywane w tabeli hash przeciwko ich nazwa (EG „ContentMgmtContext”).
Cały kontakt z bazą danych w tym systemie odbywa się poprzez procedury składowane. Aby wykonać wywołanie do bazy danych, podpis metody zapytania wygląda następująco:
List<TReturn> Query<TReturn>(string Context,
string Procedure,
TransactionScope Scope,
List<ObjectParameter> QueryParameters)
Ta modułowość jest czymś, co lubię. Jest jednak jedna istotna wada tego podejścia: when using the database layer, the code using it has to have a reference to the library in which the context is stored, in order to access the types returned by the stored procedures through Entity Framework.
w modelu obiekty z warstwy bazy danych są tłumaczone na nowe obiekty, których używają widok i kontroler.
Myślę, że to zły projekt, ale jak mogę go poprawić? Rozważałem dodanie pustego interfejsu, IStoredProecedureObject
aby nadać każdemu typowi danych zwracanych przez procedurę przechowywaną wspólny typ podstawowy, jednak wydaje się, że jest to udaremniane przez Entity Framework. Za każdym razem, gdy .edmx
plik jest ponownie kompilowany, kod jest generowany od nowa, a wszelkie dodatki usuwane. Czy jest jakiś sposób, aby temu zapobiec?
Jak mogę ulepszyć ten projekt? Co (jeszcze) jest z tym nie tak? A może jestem na dobrej drodze?