当前位置:编程学习 > asp >>

xEasyApp之后端的介绍

前文我已经说了,为了能够让大家更好的理解xjplugin如何在asp.net mvc中应用,我编写了这样一个demo,本篇博文简要的说明下xEasy的结构,讲解一下ASP.NET MVC 和xjplugin 之外的东西。从这里下载到代码。要求安装了VS2010 和ASP.NETMVC3.0.打开解决方案,我们可以看到有两个主要的项目和一个解决方案文件夹,如下图所示:

 image

 

其中xEasyApp.Web为网站, 包括视图,控制器,视图所需的特殊的Model 和js,css,image等文件。

xEasyApp.Core则包含项目的业务逻辑层,数据访问层,和一起一些公用的类,如异常,配置读取类等。MVC中的Model在这里。。

refdll中是项目中所引用的外部DLL,这里只有一个StructureMap (这时候一个IOC的类库,非常轻巧,也方便使用)。

 

1: 利用T4模板生成数据访问

也许还有人问T4是什么,关于T4的一些细节大家可以参考这里的几篇文章:

说到底它是一个基于模板的代码生成工具,其中模板又可以用C#编写,所以很方便哦

在xEasyApp中利用T4模板根据数据库的结构生成基本的访问代码(它生成的不是一个完整的ORM框架,事实上如果要做的话是可以的。要知道Entity Framework就是基于T4的代码生成),在生成代码之前,我编写了两个基类用来包含一些功能的方法和属性,以便在编码的更好的调用

一个是:BaseRepository :定义了数据访问的基本方法如ExcuteDataReader,ExcuteDataTable,ExecuteScalar,ExcuteNoQuery,还有执行相关存储过程的方法。 如果你在实际的项目中需要更好的控制连接池,或者数据访问层,可以对这个基类进行调整。xEasyApp现在是使用的SqlHelper我相信已经可以满足大部分的企业内部应用需求。

另外一个是:BaseEntity 定义数据实体的基类,定义了实体状态的一些基本方法,如变更的字段,是否为新增记录等等。

另外还定义了存储过程的封装。

 image

定义了五个模板分别生成数据访问,实体和存储过程访问封装,其中Settings.ttinclude 定义的是配置和配置读取类,还有一些最基本的,如表信息,列信息的描述等,而SQLServer.ttinclude则包含读取数据库中

Repositories.tt 是生成数据访问类,每个表一个类,会生成新增更新和删除,获取方法。

  1:  <#@ template language="C#v3.5" debug="False" hostspecific="True"  #> 

2:  <#@ output extension=".cs" #> 

3:  <#@ include file="SQLServer.ttinclude" #> 

4:  <# var tables = LoadTables();#>

  5:  //=============================================

  6:  // 该

  7:  // 生 <#= DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") #>

  8:  // =============================================

  9:  using System;

10:  using System.Data;

 11:  using System.Text;

 12:  using System.Data.SqlClient;

13:  using System.Collections.Generic;

 14:  

15:  

 16:  namespace <#=Namespace#> {

17:      

18:  <#  foreach(var tbl in tables){

19:          if(!ExcludeTables.Contains(tbl.Name))

20:          {

21:            var pkColumn = tbl.Columns.SingleOrDefault(x => x.Name.ToLower().Trim() == tbl.PrimaryKey.ToLower().Trim());

 22:           

 23:  #>

24:          /// <summary>

 25:          /// Table: <#=tbl.Name#>

 26:          /// Primary Key: <#=tbl.PrimaryKey#>

 27:          /// </summary>

 28:          public partial class <#=Cleans(tbl.CleanName)#>Repository:BaseRepository 

 29:          {           

  30:              public void Save(<#=Cleans(tbl.CleanName)#> item)

 31:              {

 32:                  if(item.IsNew)

 33:                  {

34:                      Insert(item);

35:                  }

36:                  else

 37:                  {

 38:                      Update(item);

 39:                  }

40:              }    

41:              public <#=Cleans(tbl.CleanName)#> Get(<#=pkColumn.SysType#> key)

42:              {

43:                  string sql = "SELECT <#

44:  int i=0;

 45:  foreach(var col in tbl.Columns){

46:      if(i>0)

47:      {

48:          #>,<#

49:      }

 50:      #>[<#= col.Name #>]<#

51:      i++;

52:  }

53:  #> FROM [<#=tbl.Name#>] WHERE [<#=tbl.PrimaryKey#>]=@<#=tbl.PrimaryKey#>";

54:                  SqlParameter p =new SqlParameter("@<#=tbl.PrimaryKey#>",key);

 55:                  <#=Cleans(tbl.CleanName)#> item =null;

56:                  using(IDataReader reader = base.ExcuteDataReader(sql,p))

57:                  {

58:                      if(reader.Read())

 59:                      {

60:                          item =new <#=Cleans(tbl.CleanName)#>();

补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,