我前一阵子写了以下内容,但是最近我来回顾它,现在认为它不是一个好的设计。
该设计针对使用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
为存储过程返回的每种数据类型赋予一个通用的基本类型,但是这似乎被实体框架所挫败。每次.edmx
重新编译文件时,都会重新生成代码,并删除所有添加的代码。有什么办法可以阻止这种情况的发生?
如何改善设计?这有什么(其他)问题?还是我步入正轨?