用CodeSmith生成数据库实体类的代码.

<%@ CodeTemplate Language="VB" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="Template description here." %>
<%@ Assembly Name="System.Data" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="System.Design" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import NameSpace="System.IO" %>
<%@ Import NameSpace="System.Design" %>

<%@ Property Name="CurDB" Type="SchemaExplorer.DatabaseSchema" Category="Context" Description="当前操作的数据库." %>
<%@ Property Name="CurTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="选择的数据表名称." %>
<%@ Property Name="MakeLanguage" Type="ML" Default="0" Optional="False" Category="Other" Description="设置要生成的操作语言" %>
<%@ Property Name="NameSpaces" Type="String" Default="EagleFly" Category="Other" Description="类文件的名空间" %>

<%--------------------------------模板开始-------------------------------%>
<%If MakeLanguage = ML.VB Then %>
Imports System
Imports System.Data
Imports EagleFlyFCL.Data

Namespace Model

 <Serializable()>Public Class <%= CurTable.Name %>Entity

    Public Sub New()
        'ToDo
    End Sub
   
<%=GetMakeCode(ML.VB)%>
    End Class

End Namespace
<% ElseIf MakeLanguage = ML.CSharp Then %>
using System;
using System.Data;

namespace <%=NameSpaces%>.Model
{

    public class <%= CurTable.Name %>
    {
        public <%= CurTable.Name %>()
        {
            // TODO: 在此处添加构造函数逻辑
        }
       
<%=GetMakeCode(ML.CSharp)%>
    }
}
<% End If %>
<%--------------------------------模板结束-------------------------------%>

<script runat="template">
#region "Normal"

    Public Enum ML
        VB = 0
        CSharp = 2
    End Enum
   
    '得到指定语言生成的代码
    Public Function GetMakeCode(ByVal MakeLang As ML) As String
        If MakeLang = ML.VB Then
            Return GetVBCode()
        ElseIf MakeLang = ML.CSharp Then
            Return GetCSCode()
        End If
    End Function
   
#end region

    Private Function FirstToLower(ByVal Str As String) As String
        Dim S As String
        S = Str.Substring(0, 1).ToLower & Str.Substring(1)
        Return S
    End Function
 
 Private Function AllToLower(ByVal Str As String) As String
        Dim S As String
        S = Str.ToLower
        Return S
    End Function
 
    Public Function GetVBCode() As String
        Dim Field As ColumnSchema : Dim SB As New System.Text.StringBuilder(100)
        Dim ColumnName As String : Dim ColumnType As String
        Dim FL As String
       
        For Each Field In CurTable.Columns
            ColumnName = Field.Name
            ColumnType = GetColumnDataType(ML.VB, Field)
            FL = FirstToLower(ColumnName)
           
            SB.Append(vbTab & "Private _" & FL & " As " & ColumnType & GetDefaultValue(ColumnType) & vbCrLf)
            SB.Append(vbTab & "<ColumnName()> Public Property " & ColumnName & "() As " & ColumnType & vbCrLf)
            SB.Append(vbTab & vbTab & "Get" & vbCrLf)
            SB.Append(vbTab & vbTab & vbTab & "Return _" & FL & vbCrLf)
            SB.Append(vbTab & vbTab & "End Get" & vbCrLf)
            SB.Append(vbTab & vbTab & "Set(ByVal Value As " & ColumnType & ")" & vbCrLf)
            SB.Append(vbTab & vbTab & vbTab & "_" & FL & " = Value" & vbCrLf)
            SB.Append(vbTab & vbTab & "End Set" & vbCrLf)
            SB.Append(vbTab & "End Property" & vbCrLf & vbCrLf)

        Next

        Return SB.ToString

    End Function


    Public Function GetCSCode() As String

        Dim Field As ColumnSchema : Dim SB As New System.Text.StringBuilder(100)
        Dim ColumnName As String :Dim LowerColName as string : Dim ColumnType As String
  
  For Each Field In CurTable.Columns
      ColumnName = Field.Name
            ColumnType = GetColumnDataType(ML.CSharp, Field)
   LowerColName=AllToLower(ColumnName)
   SB.Append(vbTab & vbTab & "private " & ColumnType & " _" & LowerColName & GetDefaultValue(ColumnType) & vbCrLf)
  next
  SB.Append(vbCrLf)
        For Each Field In CurTable.Columns
            ColumnName = Field.Name
            ColumnType = GetColumnDataType(ML.CSharp, Field)
   LowerColName=AllToLower(ColumnName)
           
            SB.Append(vbTab & vbTab & "public " & ColumnType & " " & ColumnName & vbCrLf)
            SB.Append(vbTab & vbTab & "{" & vbCrLf)
            SB.Append(vbTab & vbTab & vbTab & "get" & vbCrLf)
            SB.Append(vbTab & vbTab & vbTab & "{" & vbCrLf)
            SB.Append(vbTab & vbTab & vbTab & vbTab & "return _" & LowerColName & ";" & vbCrLf)
            SB.Append(vbTab & vbTab & vbTab & "}" & vbCrLf)
            SB.Append(vbTab & vbTab & vbTab & "set" & vbCrLf)
            SB.Append(vbTab & vbTab & vbTab & "{" & vbCrLf)
            SB.Append(vbTab & vbTab & vbTab & vbTab & "_" & LowerColName & " = value" & ";" & vbCrLf)
            SB.Append(vbTab & vbTab & vbTab & "}" & vbCrLf)
            SB.Append(vbTab & vbTab & "}" & vbCrLf & vbCrLf)
        Next

        Return SB.ToString

    End Function

         Public Function GetDefaultValue(ByVal ColumnType As String) As String
            Select Case ColumnType
                Case "Integer", "Double"
                    Return "=0 "
                Case "int", "double"
                    Return "=0; "
                Case "String"
                    Return "= """""
                Case "string"
                    Return "= """";"
                Case "DateTime"
                    If MakeLanguage=ML.VB Then
                        Return "=System.DateTime.Now "
                    Else
                        Return "=System.DateTime.Now;"
                    End If
                Case "Boolean"
                    Return "=False "
                Case "bool"
                    Return "=false; "
                Case Else
                    If MakeLanguage=ML.VB Then
                        Return "=new " & ColumnType
                    Else
                        Return "=new " & ColumnType & ";"
                    End If
            End Select
        End Function


    '返回字段的对应数据类别
    Public Function GetColumnDataType(ByVal MakeLang As ML, ByVal ColumnField As SchemaExplorer.ColumnSchema) As String
        Select Case ColumnField.NativeType.ToLower
            Case "int", "tinyint", "smallint", "bigint"
                If MakeLang = ML.VB Then
                    Return "Integer"
                ElseIf MakeLang = ML.CSharp Then
                    Return "int"
                End If
            Case "decimal", "float", "money", "numeric", "smallmoney"
                If MakeLang = ML.VB Then
                    Return "Double"
                ElseIf MakeLang = ML.CSharp Then
                    Return "double"
                End If
            Case "char", "nchar", "ntext", "text", "varchar", "nvarchar"
                If MakeLang = ML.VB Then
                    Return "String"
                ElseIf MakeLang = ML.CSharp Then
                    Return "string"
                End If
            Case "smalldatetime", "timestamp", "datetime"
                Return "DateTime"
            Case "bit"
                If MakeLang = ML.VB Then
                    Return "Boolean"
                ElseIf MakeLang = ML.CSharp Then
                    Return "bool"
                End If
            Case "binary", "image", "varbinary"
                If MakeLang = ML.VB Then
                    Return "Byte()"
                ElseIf MakeLang = ML.CSharp Then
                    Return "byte[]"
                End If
        End Select
    End Function

</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值