codesmith 自动生成C# model 实体模板
<%--
Name:自动生成
Author: 陈胜威
Description: 直接生成model类
--%>
<%@ Template Language="C#" TargetLanguage="cs" %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Default="" Optional="True" Category="Tables" Description="This is a sample string property." %>
<%@ Property Name="ProjectName" Type="System.string" Default="Blog" Optional="False" Category="Strings" Description="This is Project Name" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="System.Data" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="System.Data" %>
<%@ Map Name="SqlCSharp" Src="Sql-CSharp" Description="System to C# Type Map" %>
<%@ Map Name="DbDataReader" Src="DbType-DataReaderMethod" Description="DbType to DataReader Method Map" %>
<%@ Map Name="SqlNativeSqlDb" Src="SqlNativeType-SqlDbType" Description="SqlNativeType to SqlDbType Map" %>
<%@ Map Name="DbTypeCSharp" Src="DbType-CSharp" Description="DbType to CSharp Map" %> using System; namespace <%= ProjectName%>.Model
{
public class <%= GetClassName(SourceTable) %>
{
<%
foreach(var column in SourceTable.Columns)
{
%> <%=GetMemberVariableDeclarationStatement(column)%> <%
}
%>
public <%= GetClassName(SourceTable) %>(<%=GetConStructorParameters(SourceTable) %>)
{
<%
foreach(ColumnSchema column in SourceTable.Columns)
{
%>
<%= GetMemberVariableName(column) %>=<%= GetMemberVariableName(column).Substring(1) %>; <%
}
%>
} <% foreach(ColumnSchema column in SourceTable.Columns)
{
%> public <%=GetCSharpVariableType(column) %> <%=GetPascalMemberVariableName(column) %>
{
get
{ return <%=GetMemberVariableName(column) %>; }
set
{ <%=GetMemberVariableName(column) %>=value; } } <%
}
%>
}
} <script runat="template">
public string GetConStructorParameters(TableSchema table)
{
string returnParameters="";
foreach(ColumnSchema column in table.Columns)
{
returnParameters+=GetCSharpVariableType(column)+" "+GetMemberVariableName(column).Substring(1)+",";
}
return returnParameters.Substring(0,returnParameters.Length-1);
} public string GetMemberVariableDeclarationStatement(ColumnSchema column)
{
return GetMemberVariableDeclarationStatement("private", column);
} public string GetMemberVariableDeclarationStatement(string protectionLevel, ColumnSchema column)
{
string statement = protectionLevel + " ";
statement += GetCSharpVariableType(column) + " " + GetMemberVariableName(column); string defaultValue = GetMemberVariableDefaultValue(column);
if (defaultValue != "")
{
statement += " = " + defaultValue;
} statement += ";"; return statement;
} public string GetReaderAssignmentStatement(ColumnSchema column, int index)
{
string statement = "if (!reader.IsDBNull(" + index.ToString() + ")) ";
statement += GetMemberVariableName(column) + " = "; if (column.Name.EndsWith("TypeCode")) statement += "(" + column.Name + ")"; statement += "reader." + GetReaderMethod(column) + "(" + index.ToString() + ");"; return statement;
} public string GetCamelCaseName(string value)
{
return value.Substring(0, 1).ToLower() + value.Substring(1);
} public string GetMemberVariableName(ColumnSchema column)
{
string propertyName = GetPropertyName(column);
string memberVariableName = "_" + GetCamelCaseName(propertyName); return memberVariableName;
} public string GetPascalMemberVariableName(ColumnSchema column)
{
string propertyName = GetPropertyName(column);
string memberVariableName = "_" + GetCamelCaseName(propertyName); string temp= propertyName.Substring(0,1).ToUpper()+propertyName.Substring(1);
return temp;
} public string GetPropertyName(ColumnSchema column)
{
string propertyName = column.Name; if (propertyName == column.Table.Name + "Name") return "Name";
if (propertyName == column.Table.Name + "Description") return "Description"; if (propertyName.EndsWith("TypeCode")) propertyName = propertyName.Substring(0, propertyName.Length - 4); return propertyName;
} public string GetMemberVariableDefaultValue(ColumnSchema column)
{
switch (column.DataType)
{
case DbType.Guid:
{
return "Guid.Empty";
}
case DbType.AnsiString:
case DbType.AnsiStringFixedLength:
case DbType.String:
case DbType.StringFixedLength:
{
return "String.Empty";
}
default:
{
return "";
}
}
} public string GetCSharpVariableType(ColumnSchema column)
{
if (column.Name.EndsWith("TypeCode")) return column.Name; return DbTypeCSharp[column.DataType.ToString()];
} public string GetReaderMethod(ColumnSchema column)
{
return DbDataReader[column.DataType.ToString()];
} public string GetClassName(TableSchema table)
{
if (table.Name.EndsWith("s"))
{
return table.Name.Substring(0, table.Name.Length - 1);
}
else
{
return table.Name;
}
} public string GetSqlDbType(ColumnSchema column)
{
return SqlNativeSqlDb[column.NativeType.ToString()];
} public string GetPrimaryKeyType(TableSchema table)
{
if (table.PrimaryKey != null)
{
if (table.PrimaryKey.MemberColumns.Count == 1)
{
return GetCSharpVariableType(table.PrimaryKey.MemberColumns[0]);
}
else
{
throw new ApplicationException("This template will not work on primary keys with more than one member column.");
}
}
else
{
throw new ApplicationException("This template will only work on tables with a primary key.");
}
} public override string GetFileName()
{
return this.GetClassName(this.SourceTable) + ".cs";
}
</script>
codesmith 自动生成C# model 实体模板的更多相关文章
- CodeSmith单表生成实体模板与生成多表实体模板
生成单实体模板: <%@ Template Language="C#" TargetLanguage="C#" %> <%@ Assembly ...
- SqlServer数据库表生成C# Model实体类SQL语句——补充
在sql语句最前边加上 use[数据库名] 原链接:https://www.cnblogs.com/jhli/p/11552105.html --[SQL骚操作]SqlServer数据库表生成C ...
- 使用generator自动生成mybatis model、mapper.xml、mapper等(转)
原文链接:http://www.cnblogs.com/lichenwei/p/4145696.html Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件 ...
- 如何由XSD自动生成XML和实体类
项目中有时候要用XML作为数据源,因此需要定义XML文件和相应的类,最佳方法是首先定义XSD,然后自动生成实体类,最后生成XML和填充数据:读取XML数据源的时候,首先用XSD验证XML数据格式,然后 ...
- MyEclipse10中自动生成Hibernate的实体和xml配置文件
前提:1.在项目中添加Hibernate支持 2.MyEclipse中已经创建好数据库连接 3.表已经建好并且有主键 步骤如下: 1.在DB Browser窗口的已打开连接节点中选中用户创建的所有的表 ...
- 根据现有的数据库自动生成Django model
Django引入外部数据库还是比较方便的,首先在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致 运行下面代码可以自动生成models模型文件 python ma ...
- Yii2用Gii自动生成Module+Model+CRUD
1. 开启gii模块 common/config/main-local.php加入下面代码 return [ 'modules' => [ 'gii' => [ 'class' => ...
- idea集成 MyBatis Generator 插件,自动生成dao,model,sql map文件
1.集成到开发环境中 以maven管理的功能来举例,只需要将插件添加到pom.xml文件中即可.(注意此处是以plugin的方式,放在<plugins></plugins>中间 ...
- Java工具类_表结构自动生成对应的实体类、Mapper.xml文件、Dao类
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWrit ...
随机推荐
- UVA 12284 Digital Matrix
思路:这个分清楚情况就很好做了. 注意一点当A的转置等于B的时候(对角线除外),记录A的下三角(或上三角)有cnt个的数与B不同,如果cnt>1则 不需要额外的步数就可以了,否则当k==2时结果 ...
- Ubuntu 16.04安装KVM
说明:其实之前我有安装过KVM,只是但是不知道这个就是KVM,而当时只知道叫做QEMU虚拟机. 安装: http://www.cnblogs.com/EasonJim/p/7215836.html h ...
- maven 创建web工程,spring配置文件找不到!
公司项目用的maven,在启动服务器的时候,出现上面的错误,然后找到WEB-INF下面的web.xml,给classPath加上*号,解决!
- 如何释放 DB_RECOVERY_FILE_DEST_SIZE
转自原文 如何釋放 DB_RECOVERY_FILE_DEST_SIZE,有删减 oracle默認安裝之後,如何沒有手動設置歸檔路徑(alter system set log_archive_dest ...
- oracle 察看用户是否被锁,解锁以及改密码
以管理员身份登陆 察看用户状态(是否被锁) select * from dba_users where username='user1' 解锁 ALTER USER user1 ACCOUNT UN ...
- 二十四种设计模式:策略模式(Strategy Pattern)
策略模式(Strategy Pattern) 介绍定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法的变化可独立于使用它的客户. 示例有一个Message实体类,对它的操作有 ...
- Xilinx Spartan6常用资源Verilog例化
// DSP48A1 : In order to incorporate this function into the design, // Verilog : the following insta ...
- c# string与String区别
[C#] String与string的区别:供参考 转自:https://www.cnblogs.com/rosesmall/p/8351808.html C#是区分大小写的,但是我却发现C#中同时存 ...
- Spark Streaming的PIDRateEstimator与backpressure
PIDRateEstimator是Spark Streaming用来实现backpressure的关键组件. 看了一些博客文章,感觉对它的解释都没有说到要点,还是自己来研究一下比较好. 首先,需要搞清 ...
- HDU 3726 Graph and Queries treap树
题目来源:HDU 3726 Graph and Queries 题意:见白书 思路:刚学treap 參考白皮书 #include <cstdio> #include <cstring ...