• (转)菜鸟级三层框架(EF+MVC)项目实战之 系列二 对数据访问层的抽象上


    原文地址:http://www.cnblogs.com/rdst/archive/2012/08/12/2634159.html

    系列概述:全系列会详细介绍抽象工厂三层的搭建,以及EF高级应用和 ASP.NET MVC3.0简单应用,应用到的技术有Ef、Lambda、Linq、Interface、T4等。
                     由于网上对涉及到的技术概念介绍很多,因此本项目中不再对基本概念加以叙述。
    系列二概述:该系列详细介绍了如何抽象出公用方法(CRUD),以及T4模版的应用。
    一、创建Cnblogs.Rdst.IDAO程序集
    1.1 先在解决方案中创建一个Interface 文件夹,用于存放抽象出的接口
    1
    1.2 在Interface文件夹中添加名为Cnblogs.Rdst.IDAO的程序集
    1.2.1
    1.3 添加引用系列一中创建的Domain程序集和System.Data.Entity程序集
    1.3          
    二、抽象数据访问层的基接口
    2.1 在刚创建的Cnblogs.Rdst.IDAO程序集中创建IBaseDao接口
    2
    2.2 在IBaseDao中定义常用的CRUD方法
    复制代码
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace Cnblogs.Rdst.IDAO
     7 {
     8    public interface IBaseDao<T>
     9                  where T:class,
    10                  new ()//约束T类型必须可以实例化
    11    {
    12        //根据条件获取实体对象集合
    13        IQueryable<T> LoadEntites(Func<T,bool> whereLambda );
    14 
    15        //根据条件获取实体对象集合分页
    16        IQueryable<T> LoadEntites(Func<T,bool> whereLambda, int pageIndex, int pageSize,out int totalCount);
    17 
    18        //增加
    19        T AddEntity(T entity);
    20 
    21        //更新
    22        T UpdateEntity(T entity);
    23 
    24        //删除
    25        bool DelEntity(T entity);
    26 
    27        //根据条件删除
    28        bool DelEntityByWhere(Func<T, bool> whereLambda);
    29    }
    30 }
    复制代码



                  此时基接口中的CRUD方法就定义完成。接下来我们需要使用T4模版生成所有的实体类接口并实现IBaseDao接口。

       三、生成所有的实体类接口

              3.1 添加名为IDaoExt 的T4文本模版

                 3

              3.2 在模版中贴入以下代码,其中注释的地方需要根据各自的项目进行更改

    <#@ template language="C#" debug="false" hostspecific="true"#>
    <#@ include file="EF.Utility.CS.ttinclude"#><#@
     output extension=".cs"#>
    <#
    CodeGenerationTools code = new CodeGenerationTools(this);
    MetadataLoader loader = new MetadataLoader(this);
    CodeRegion region = new CodeRegion(this, 1);
    MetadataTools ef = new MetadataTools(this);
    
    string inputFile = @"..\\Cnblogs.Rdst.Domain\\Model.edmx";//指定edmx实体模型所在的路径
    
    EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
    string namespaceName = code.VsNamespaceSuggestion();
    
    EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
    
    #>
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Cnblogs.Rdst.Domain;//引用Domain的命名空间
    
    namespace Cnblogs.Rdst.IDAO //实体类接口所在的命名空间
    {
    <#
    foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name)) //便利edmx模型中映射的实体对象
    {#>    
        public interface I<#=entity.Name#>Dao:IBaseDao<<#=entity.Name#>> //生成实体对象接口
        {
        }
    <#};#>
    }


            3.3 T4模版编辑完成后,Ctrl+s保存,提示是否运行,点击确认。此时就自动帮我们生成了所有的实体类接口,并实现了IBaseDao接口,相应的也具有了CRUD方法定义。

            3.3        

           3.4

          菜鸟级三层框架(EF+MVC)项目实战之 系列二 对数据访问层的抽象中 会介绍实现类中是如何实现基接口中定义的方法

  • 相关阅读:
    Docker系列【使用docker搭建fastdfs并使用SpringBoot实现文件上传下载】
    Docker系列【使用docker搭建文件单机存储服务器minio】
    Docker系列【查看Latest的镜像具体版本和查看容器用到的镜像版本】
    Docker系列【DockerDesktop的安装和使用】
    SpringBoot系列【如何自定义Starter】
    Redis系列【分布式锁解决方案之Redisson】
    c++实训课
    链队列的实现(上课用)
    循环队列(上课用)
    AE基础01 视频添加水印
  • 原文地址:https://www.cnblogs.com/fcsh820/p/2639701.html
Copyright © 2020-2023  润新知