SqlSugar框架T4模板的使用

一、T4模板说明

1.T4模板是用来生成Model层实体类的

2.文件后缀为.tt

3.需要修改配置主要有:引用的SqlSugar.dll的位置、生成实体类的位置及生成实体类的命名空间

4.T4模板生成代码对数据库有要求,数据库应该是不区分大小写的,如果你创建的数据库是否区分大小写的“Chinese_PRC_CS_AS ”,

5.T4模板生成代码,中包括创建的视图

那么会抛出异常 'SYSOJBECTS'对象无效,关于修改数据库是否区分大小写可以参考:http://blog.csdn.net/u011127019/article/details/53283251

二、T4模板使用步骤

1.创建项目后,引用SqlSugar.dll

2.添加T4模板:右键项目,选择【运行时文本模板】,后缀为.tt

还可以,将原Demo中的模板,直接Copy到本项目中

原Demo中的文件内容为:

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Xml" #>
<#@ assembly name="System.Xml.Linq" #>
<#@ assembly name="System.Data" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="SqlSugar" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Web" #>
<#@ assembly name="$(SolutionDir)\WebTest\App_Lib\SqlSugar.dll" #>

<# 
     

    //当前项目目录
    string projectDir = Host.ResolveAssemblyReference("$(ProjectDir)");

    //解决方案目录
    string solutionDir = Host.ResolveAssemblyReference("$(SolutionDir)");

 
     using (var db = new SqlSugarClient("server=.;Initial Catalog=SqlSugarTest;Persist Security Info=True;User ID=sa;Password=sasa"))
     {
          db.ClassGenerating.CreateClassFiles(db, "E://T4/Models","Models");  

      };
#>
View Code

3.修改T4模板内容:

修改完数据库连接字符串,生成路径,命名空间后,快捷键Ctrl+S如果成功的情况下,会自动生成Model层到指定记录。

4.如果需要修改Model层类文件的生成内容,可以直接修改源代码的模板,也可以使用代码的方式来生成Model层,请往下看。

 

三、使用代码生成 model层

//T4 模板代码执行
using (var db = new SqlSugarClient("server=.;Initial Catalog=sysstudent;Persist Security Info=True;User ID=sa;Password=123"))
{
    //可以结合别名表,请看别名表的用法
    //db.SetMappingTables(mappingTableList);
    db.ClassGenerating.CreateClassFiles(db, (@"F:\SolutionSet\MVC_Solution\SugarTwo\SugarTwo.Model\Model"), "SugarTwo.Model");

    //只生成student和school表的实体
    db.ClassGenerating.CreateClassFilesByTableNames(db, "e:/TestModels2", "Models", new string[] { "student", "school" });

    //根据表名生成class字符串
    var str = db.ClassGenerating.TableNameToClass(db, "Student");
    var dynamicToClassStr = db.ClassGenerating.DynamicToClass(new { id = 1 }, "dyName");

    //根据SQL语句生成class字符串
    // var str2 = db.ClassGenerating.SqlToClass(db, "select top 1 * from Student", "student");

    //改变值(lassTemplate.ItemTemplate=XXXX)可以自定义格式
    var tempItem = ClassTemplate.ItemTemplate;//例如可以在生成的实体添加默认构造函数给指定的字段赋默认值或者公司信息等
    var temp = ClassTemplate.Template;
    //设置新格式模板
    //主键Guid.New(),
    //CreateTime为DateTime.Now 
    //IsRemove=0
    //UpdateTime为DateTime.Now 
    ClassTemplate.Template = "using System;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace $namespace\r\n{\r\n    public class $className\r\n    {\r\n        public $className() \r\n        { \r\n            this.CreateTime = DateTime.Now;\r\n            this.  = 0;\r\n            this.UpdateTime=DateTime.Now;\r\n            this.$primaryKeyName=Guid.NewGuid().ToString(\"N\").ToUpper();\r\n        }\r\n        $foreach\r\n    }\r\n}\r\n";

    //新格式的实体字符串
    var str3 = db.ClassGenerating.TableNameToClass(db, "Student");
}

使用代码生成Model层,有个好处,如果T4模板在生成代码的过成功抛出异常,可以调试查看。

 

如果想自定义生成实体的一些格式请改变这3个静态变量的模版

 var tempItem=ClassTemplate.ItemTemplate;  类的模版
 var temp=ClassTemplate.Template ;   字段模版
 ClassTemplate.ClassFieldSummaryTemplate 字段摘要模版

 

更多:

.Net开源SqlServer ORM框架SqlSugar整理

posted @ 2016-11-22 11:56  天马3798  阅读(7395)  评论(0编辑  收藏  举报