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