HKH小类库系列(三)实体框架与MVA1.0之小架构
本架构在项目使用后,被我抽出来,与大家分享。支持的是实体框第一个版本和MVC1.0
整体结构介绍:
结合经典三层架构,加上实体框架提出的新理念,整个框架应该分为三层四个类库,我发布的只是架构中的接口和基类设计。
三层为仓储层,服务层和表示层,四个类库为Repository, BizService,MvcUI和Entity.
1、Entity类库里面只有一项内容,封装实体框架自动生成的代码,
2、Repository层提供数据访问的方法,包括增、删、改和查
3、BizService层封装业务逻辑,其中实体框架ObjectContext在此层维护,并传递到Repository层。
4、MvcUI层提供用户页面接口,同时负责ObjectContext对象的销毁工作。
使用方法及重点类说明
1、所有Repository层类需要继承ReposiporyBase接口。为了能够动态生成查询条件,我们要使用ObjectQuery上的where(string expression, params objectparameter[] )重载方法,此方法的第一个参数采用Esql语法,为了同时支持显示外键加载,我们对此方法进行封装,允许用户以参数方式传入要加载的关联
表的名称,并会动态执行include方法。
另外,直接暴露ObjectQuery对象给BizService层,方便用户使用LinqtoEntity执行查询。
虽然ESQL不支持DML语句,但我们仍然封装了ExecuteNonQuery等方法,以方便用户执行存储过程和等待DML被支持后执行ESQL DML语句。
2、BizService层所有类需要继承BizServiceBase接口,并需要重写Repository属性供基类使用。在本层我们可以使用HKH.Edm中封装的系列Criterion类来方便的
拼装查询条件进行动态查询。
另,在此层中我们最好填加ServiceContext类来维护ObjectContext,本框架中使用些模式实现一请求一实例,我相信亦可以推广到传统的WebForm开发中。
3、MVCUI中,为了实现一请求只实例化一次对象上下文,在此我们要实现请求结束时,销毁对象上下文对象功能。为此,此层我们使用ExceptionFilter来实现异常情况下的对象销毁和利用Globax全局文件中的PostRequestHandlerExecute事件来实现正常情况下的对象销毁。
注:我们必须实现一请求实例化一次对象上下文,万不可尝试在Session缓存上下文对象。
理由:如果我们将对象缓存中Session中,一旦发生异常,该异常将无法清除,以后的所有操作都将捕捉到该异常,若有人解决了此问题,请E-mail或留言给我。
框架下载地址: