Я написав наступне ще назад, але нещодавно прийшов переглянути його, і тепер не думаю, що це гарний дизайн.
Конструкція призначена для свого роду модульного рівня баз даних, що використовує Entity Framework 4. Існує єдиний об'єкт бази даних, який завантажує (ліниво) рамки контексту сутності з зовнішніх бібліотек у визначеному місці, а екземпляри завантажених контекстів зберігаються в хеш-таблиці проти їх назва (EG "ContentMgmtContext").
Весь контакт з базою даних в цій системі здійснюється через збережені процедури. Щоб здійснити виклик до бази даних, підпис методу запиту виглядає так:
List<TReturn> Query<TReturn>(string Context,
string Procedure,
TransactionScope Scope,
List<ObjectParameter> QueryParameters)
Ця модульність - це те, що мені подобається. Однак є один суттєвий недолік цього підходу: 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.у моделі об’єкти із шару бази даних переводяться на нові об’єкти, якими користуються представлення та контролер.
Я думаю, що це погана конструкція, але як я можу її вдосконалити? Я розглядав можливість додавання порожнього інтерфейсу, як IStoredProecedureObjectнадати кожному типу даних, що повертається збереженою процедурою, загальний базовий тип, однак, схоже, це було зірвано Entity Framework. Кожен раз, коли .edmxфайл перекомпілюється, код генерується заново, а будь-які доповнення видаляються. Чи є спосіб зупинити це?
Як я можу вдосконалити цей дизайн? Що (ще) з цим не так? Або я на правильному шляху?