xEasyApp之后端的介绍
前文我已经说了,为了能够让大家更好的理解易做图lugin如何在asp.net mvc中应用,我编写了这样一个demo,本篇博文简要的说明下xEasy的结构,讲解一下ASP.NET MVC 和易做图lugin 之外的东西。从这里下载到代码。要求安装了VS2010 和ASP.NETMVC3.0.打开解决方案,我们可以看到有两个主要的项目和一个解决方案文件夹,如下图所示:
其中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 定义数据实体的基类,定义了实体状态的一些基本方法,如变更的字段,是否为新增记录等等。
另外还定义了存储过程的封装。
定义了五个模板分别生成数据访问,实体和存储过程访问封装,其中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 ,