设为首页 加入收藏

TOP

EntityFramework实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)(二)
2015-07-24 11:10:46 来源: 作者: 【 】 浏览:4
Tags:EntityFramework 实体 框架 形成 之旅 基于 仓储 模式
何处理修改,最终会解析后得到相应的数据库执行语句,然后进行提交处理了。

?

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的分层和数据访问层的类似,主要是提高一份,方便做业务整合实现而已,在此不再赘述。

最终实现仓储模式框架的分层结构如下所示。

\

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

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇【翻译自mos文章】当在os上的data.. 下一篇HBase1.0.0版源码分析之HMaster启..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)