Некоторое время назад я написал следующее, но недавно пришел посмотреть, и не думаю, что это хороший дизайн.
Конструкция предназначена для своего рода модульного уровня базы данных с использованием Entity Framework 4. Существует один объект базы данных, который (лениво) загружает контексты структуры объектов из внешних библиотек в указанном месте, а экземпляры загруженных контекстов хранятся в хеш-таблице для их имя (например, "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файл перекомпилируется, код генерируется заново, а любые добавления удаляются. Есть ли способ остановить это?
Как я могу улучшить этот дизайн? Что (еще) не так с этим? Или я на правильном пути?