何处理修改,最终会解析后得到相应的数据库执行语句,然后进行提交处理了。
?
3、基于泛型的仓储模式实体框架
如果基于第一点来构建框架,虽然很快速,但是这样的做法在中大型的项目里肯定不可取,因为生成后的代码还需要进行多个步骤的修改调整,而且也没有很好实现重用的目的,很多地方需要自己手动编码处理,结构也不是很清晰,因此需要对框架进行一步步的优化和提炼。
在介绍基于泛型的仓储模式实体框架(The Entity Framework of Generic Repository Pattern )前,我们先来回顾一下我之前的Winform开发框架分层结构,这个基于Enterprise Library的框架,常见的分层模式,可以分为UI层、BLL层、DAL层、IDAL层、Entity层、公用类库层等等。

这种分层可以在数据库设计完成后,可以通过代码生成工具,获取到表对象的信息和关系,直接快速生成相应的分层代码,从而实现架构、分层、命名规则等方面的一致化,并且是快速开发。
而且这种分层模式也是一种比较通用的分层结构了,那么我们要介绍的实体框架是否也可以依照这种方式来构建呢?是否可以结合代码生成工具的生成模板来进行整体性框架的开发呢?
下面我们来介绍一下泛型的仓储模式框架的具体实现过程。
1)实体类的代码如下所示(先按表名生成)。
public partial class TB_City
{
public long ID { get; set; }
public string CityName { get; set; }
public string ZipCode { get; set; }
public Nullable ProvinceID { get; set; }
}
2)数据访问基类接口层(定义了几个测试的基类接口)
///
/// 数据访问层基类接口
///
/// 实体对象类型
public interface IBaseDAL where T : class
{
T Get(object id);
IList GetAll(Expression> whereCondition);
IList GetAll();
}
3)数据访问层基类实现层
///
/// 数据访问层基类实现层
///
/// 实体对象类型
public abstract class BaseDAL : IBaseDAL where T : class
{
protected DbContext baseContext;
protected IDbSet objectSet;
public BaseDAL(DbContext context)
{
this.baseContext = context;
this.objectSet = this.baseContext.Set();
}
public T Get(object id)
{
return objectSet.Find(id);
}
public IList GetAll()
{
return objectSet.ToList();;
}
public IList GetAll(Expression> whereCondition)
{
return objectSet.Where(whereCondition).ToList();
}
}
4)具体数据访问对象接口定义(城市表为例)
///
/// 城市数据访问层接口
///
public interface ICityDAL : IBaseDAL
{
}
5)具体数据访问对象实现层(城市表为例)
///
/// 城市数据访问对象
///
public class CityDAL : BaseDAL
{
protected MyDataContext context;
///
/// 构造函数
///
///
public CityDAL(MyDataContext context) :base(context)
{
this.context = context;
}
6)数据仓储对象(上下文对象)
public class MyDataContext : DbContext
{
public MyDataContext() : base("name=sqlserver")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet City { get; set; }
}
BLL、IBLL的分层和数据访问层的类似,主要是提高一份,方便做业务整合实现而已,在此不再赘述。
最终实现仓储模式框架的分层结构如下所示。

以上就是我对基于泛型的仓储模式的实体框架的一个初探性的开端,下面会在这个系列里面继续分析其中存在的问题,并继续优化改良这个基于泛型的仓储模式的实体框架。希望大家喜欢并继续支持。