CodeSmith自动生成实体类文件(数据库中所有表的实体类)!

来源:互联网 发布:it行业是什么 编辑:程序博客网 时间:2024/06/10 19:03

此模版需要执行2次

第1次执行产生.cs文件,然后报“此文件被进程占用”的提示,算是一个Bug吧,还在改进

第2次执行产生get()和set()

<%@ CodeTemplate Language="C#" TargetLanguage="C#" Inherits="OutputFileCodeTemplate" Description="Template description here." %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="System.Design" %>
<%@ Assembly Name="CodeSmith.BaseTemplates" %>
<%@ Assembly Name="CodeSmith.CustomProperties" %>
<%@ Import Namespace="CodeSmith.BaseTemplates" %>
<%@ Import Namespace="CodeSmith.CustomProperties" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Text.RegularExpressions" %>
<%@ Import Namespace="CodeSmith.CustomProperties" %>

<%@ Property Name="SourceData" Type="SchemaExplorer.DatabaseSchema" Optional="False" Category="Context" Description="" %>
<%@ Property Name="Output" Type="System.String" Default="D:/MyModel" Optional="False" Category="Context" Description="" %>

<%
    Render();
%>

<script runat="template">
//Table List
public TableSchemaCollection GetTableCollection(DatabaseSchema dataBase)
{
    TableSchemaCollection tables 
= new TableSchemaCollection(dataBase.Tables);
    
return tables;
}

//Column Type
public string GetType(ColumnSchema column)
{
    
if (column.Name.EndsWith("TypeCode")) return column.Name;
    
    
switch (column.DataType)
    
{
        
case DbType.AnsiString: return "string";
        
case DbType.AnsiStringFixedLength: return "string";
        
case DbType.Binary: return "byte[]";
        
case DbType.Boolean: return "bool";
        
case DbType.Byte: return "int";
        
case DbType.Currency: return "decimal";
        
case DbType.Date: return "DateTime";
        
case DbType.DateTime: return "DateTime";
        
case DbType.Decimal: return "decimal";
        
case DbType.Double: return "double";
        
case DbType.Guid: return "Guid";
        
case DbType.Int16: return "short";
        
case DbType.Int32: return "int";
        
case DbType.Int64: return "long";
        
case DbType.Object: return "object";
        
case DbType.SByte: return "sbyte";
        
case DbType.Single: return "float";
        
case DbType.String: return "string";
        
case DbType.StringFixedLength: return "string";
        
case DbType.Time: return "TimeSpan";
        
case DbType.UInt16: return "ushort";
        
case DbType.UInt32: return "uint";
        
case DbType.UInt64: return "ulong";
        
case DbType.VarNumeric: return "decimal";
        
default:
        
{
            
return "__UNKNOWN__" + column.NativeType;
        }

    }

}

//Go
public void Render()
{
    TableSchemaCollection tables 
= GetTableCollection(SourceData);
    
foreach(TableSchema dt in tables)
    
{
        
if(Directory.Exists(Output) == false)
        
{
            Directory.CreateDirectory(Output);
        }

        
string strFileName = Output + "/" + dt.Name.ToString().Replace("dbo.",""+ ".cs";
        
if(File.Exists(strFileName) == false)
        
{
            File.Create(strFileName);
        }

    }

    
    
foreach(TableSchema dt in tables)
    
{
        
string strFileName = Output + "/" + dt.Name.ToString().Replace("dbo.",""+ ".cs";
        FileStream fs 
= new FileStream(strFileName,FileMode.Create,FileAccess.Write);
        StreamWriter sw 
= new StreamWriter(fs, System.Text.Encoding.UTF8);
        sw.WriteLine(
"using System;");
        sw.WriteLine(
"using System.Collections.Generic;");
        sw.WriteLine(
"using System.Text;");
        sw.WriteLine(
"using System;");
        sw.WriteLine(
"using System.Data;");
        sw.WriteLine(
"");
        sw.WriteLine(
"#region ==== " + dt.Name.ToString().Replace("dbo.",""+ " ====");
        sw.WriteLine(
"public class " + dt.Name.ToString().Replace("dbo.",""));
        sw.WriteLine(
"{");
        sw.WriteLine(
"    public " + dt.Name.ToString().Replace("dbo.",""));
        sw.WriteLine(
"    {}");
        sw.WriteLine(
"  #region ==== Variable ====");
            
foreach(ColumnSchema cs in dt.Columns)
            
{
        sw.WriteLine(
"    //" + cs.Description);
        sw.WriteLine(
"    private " + GetType(cs)+ " " + cs.Name.ToLower() + ";");
            }

        sw.WriteLine(
"  #endregion");
            
foreach(ColumnSchema cs in dt.Columns)
            
{
        sw.WriteLine(
"    ///<summary>");
        sw.WriteLine(
"    ///" + cs.Description);
        sw.WriteLine(
"    ///</summary>");
        sw.WriteLine(
"    public " + GetType(cs) + " " + cs.Name.ToString());
        sw.WriteLine(
"    {");
        sw.WriteLine(
"        get");
        sw.WriteLine(
"        {");
        sw.WriteLine(
"            return  " + cs.Name.ToString().ToLower() + ";");
        sw.WriteLine(
"        }");
        sw.WriteLine(
"        set");
        sw.WriteLine(
"        {");
        sw.WriteLine(
"            " + cs.Name.ToString().ToLower() + " = value;");
        sw.WriteLine(
"        }");
        sw.WriteLine(
"    }");
            }

        sw.WriteLine(
"}");
        sw.WriteLine(
"#endregion");
        sw.Close();
    }

}

</script>
 
原创粉丝点击