code smith 模版(要下载code smith软件使用):
//生成注释部分代码
<%--
Name:edmx文件加注释
Author: pukuimin
Description:
--%>
<%@ Template Language="C#" TargetLanguage="XML" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="System.Globalization" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="数据库字段类型与C#类型的映射表" %>
<%-- 数据库 --%>
<%@ Property Name="SourceDatabase" Type="SchemaExplorer.DatabaseSchema" DeepLoad="True" Optional="False" Category="需要的数据库" Description="Database"%>
<%-- 要打印的表 --%>
<%@ Property Name="Table" Type="SchemaExplorer.TableSchema" DeepLoad="True" Optional="False" Category="需要的数据表" Description="table ." %>
<%@ Property Name="IsAll" Type="System.Boolean" Optional="False" Category="是否生成全部表" Default="True" Description="是否生成全部表" %>
<%
/*
for(int i=TableName.Length-1;i>=0;i--)
{
if(TableName[i]>='A'&& TableName[i]<='Z')
{
TableName=TableName.Substring(0,i)+TableName.Substring(i,1).ToLower()+TableName.Substring(i+1);
break;
}
}
*/
string primaryname=Table.PrimaryKey.MemberColumns[0].Name;
string primarytype= CSharpAlias[Table.PrimaryKey.MemberColumns[0].SystemType.FullName];
string autoname="",autotype="";
foreach(ColumnSchema cs in Table.Columns)
{
if( ((bool)cs.ExtendedProperties["CS_IsIdentity"].Value) == true)
{
autoname=cs.Name;
autotype=CSharpAlias[cs.SystemType.FullName];
break;
}
}
List<string> fkeys=new List<string>();//存储外键列及对应的主键表名
foreach(var item in Table.ForeignKeys)
{
fkeys.Add(item.ForeignKeyMemberColumns[0].Name);
//Response.Write(item.ForeignKeyMemberColumns[0].Name+"--"+item.PrimaryKey.Table.Name+"
");
}
TableSchemaCollection tables=new TableSchemaCollection();;
if(IsAll !=true)
{
tables.Add(Table);
}
else
{
tables=this.SourceDatabase.Tables;
}
%>
<%
//if(tables==null){Response.WriteLine("空");return;}
//else {Response.WriteLine(tables.Count);}
%>
<Schema>
<!--manual modify begin-->
<!-- 复制替换 edmx文件中的 edmx:ConceptualModels 下的 Schema 内、EntityContainer前对应的内容 -->
<%foreach(TableSchema table in tables){
string TableName=table.Name;
%>
<EntityType Name="<%=TableName%>">
<Documentation>
<Summary><%=table.Description%></Summary>
</Documentation>
<Key>
<PropertyRef Name="<%=primaryname%>" />
</Key>
<% for(int i=0;i<table.Columns.Count;i++) {
ColumnSchema col=table.Columns[i];
//string lowertype=CSharpAlias[col.SystemType.FullName];
string type=col.SystemType.FullName.Replace("System.","");
string Nullable=col.AllowDBNull?"":" Nullable="false"";//是否可空
string maxlength=(type=="String"?" MaxLength=""+col.Size+""":"");//字符串最大长度
string unicode=(col.DataType.ToString()=="AnsiString"?" Unicode="false"":(col.DataType.ToString()=="String"?" Unicode="true"":""));//是否可存储中文
string fixedlength="";//长度是否固定
if(col.NativeType=="nchar" || col.NativeType=="char") fixedlength=" FixedLength="true""; //col.NativeType为数据库中的类型
else if(col.NativeType=="nvarchar" || col.NativeType=="varchar") fixedlength=" FixedLength="false"";
string precision="";
if(col.Scale>0) precision=" Precision=""+col.Scale+""";
//col.Precision
%>
<Property Name="<%=col.Name%>" Type="<%=type%>"<%=maxlength%><%=fixedlength%><%=unicode%><%=Nullable%><%=precision%> >
<Documentation>
<Summary><%=col.Description%></Summary>
</Documentation>
</Property>
<%
}
%>
</EntityType>
<%}%>
<!--manual modify end-->
</Schema>//生成文件到硬盘上
<%--
Name:GenerateFiles.cst
Author: pukuimin
Description: 生成并输出xml文件的模版
--%>
<%@ Template Language="C#" TargetLanguage="Text" Inherits="CodeTemplate" Encoding="utf-8"%>
<%@ Assembly Name="SchemaExplorer"%>
<%@ Import Namespace="SchemaExplorer"%>
<%-- 数据库 --%>
<%@ Property Name="SourceDatabase" Type="SchemaExplorer.DatabaseSchema" DeepLoad="True" Optional="False" Category="需要的数据库" Description="Database"%>
<%-- 要打印的表 --%>
<%@ Property Name="Table" Type="SchemaExplorer.TableSchema" DeepLoad="True" Optional="False" Category="需要的数据表" Description="table ." %>
<%@ Property Name="IsAll" Type="System.Boolean" Optional="False" Category="是否生成全部表" Default="True" Description="是否生成全部表" %>
<%-- 注册实体层Model模板 --%>
<%@ Register Name="edmx_sumary" Template="edmx_sumary.cst" MergeProperties="Flase" ExcludeProperties=""%>
<script runat="template">
//解决方案输出路径
private string Directory = String.Empty;
[Editor(typeof(System.Windows.Forms.Design.FolderNameEditor), typeof(System.Drawing.Design.UITypeEditor))]
[Optional, NotChecked]
[DefaultValue("")]
public string OutputDirectory
{
get
{
return Directory;
}
set
{
if (value.EndsWith("\")) value = value.Substring(0, value.Length -1);
Directory = value;
}
}
public string GetSubspace(string tableName)
{
for(int i=tableName.Length-1;i>=0;i--)
{
if(tableName[i]>='A'&& tableName[i]<='Z')
{
tableName=tableName.Substring(0,i)+tableName.Substring(i,1).ToLower()+tableName.Substring(i+1);
break;
}
}
return tableName;
}
//生成实体Entity类
private void GenerateEntityClasses()
{
CodeTemplate edmx_sumaryTemplate =new edmx_sumary();
/*
////生成基础BaseDAL抽象类
string basedalDirectory = OutputDirectory +"\DAL\BaseDAL.cs";
basedalTemplate.SetProperty("NM",MyNameSpace);//命名空间
basedalTemplate.RenderToFile(basedalDirectory,true);//文件输出
Debug.WriteLine(basedalDirectory +" 创建成功.");
*/
Response.WriteLine("……………………开始生成……………………");
string edmx_sumaryDirectory = OutputDirectory +"\edmx_sumary.xml";
//生成Service文件
edmx_sumaryTemplate.SetProperty("SourceDatabase",SourceDatabase);
edmx_sumaryTemplate.SetProperty("Table",Table);
edmx_sumaryTemplate.SetProperty("IsAll",IsAll);
edmx_sumaryTemplate.RenderToFile(edmx_sumaryDirectory,true);//文件输出
Response.WriteLine(edmx_sumaryDirectory +" 创建成功.");
Response.WriteLine("…………………… 完成生成……………………");
}
</script>
<%
//创建实体层Entity类
this.GenerateEntityClasses();
&nb