随笔 - 3  文章 - 1 评论 - 21 trackbacks - 11
<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

昵称:鹰翔
园龄:6年5个月
粉丝:0
关注:0

搜索

 
 

常用链接

随笔档案

文章分类

最新评论

摘要: 这是我平时在做ASP.NET项目里经常使用的一些函数和方法,把它们合到一个类中,希望对你们有用.ImportsSystem.WebImportsSystem.Web.UIImportsSystem.Web.UI.HtmlControlsImportsSystem.Web.UI.WebControlsNamespaceWebsPublicClassWebUtilsPrivateSharedm_sSc...阅读全文
posted @ 2005-09-03 17:08 鹰翔 阅读(3400) 评论(10) 编辑

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

在工作中,经常中与数据库层打交道,所以,我一般用一个数据库实体类来代码来进行相应的操作.
而CodeSmith则是一个功能强大的代码生成模板系统,用它可以非常快的写出你自己的模板
我这个代码只是相让大家对CodeSmith如何从数据库的表来生成代码有一个了解.
模板生成的类支持VB.NET和C#语言.

代码如下:

 

<%@ 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;
using EagleFlyFCL.Data;

namespace <%=NameSpaces%>.Service.Model
{

    [Serializable()]
    public class <%= CurTable.Name %>Entity:EntityObjectBase
    {
        public <%= CurTable.Name %>Entity()
        {
            // 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
   
    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 ColumnType As String

        For Each Field In CurTable.Columns
            ColumnName = Field.Name
            ColumnType = GetColumnDataType(ML.CSharp, Field)

            SB.Append(vbTab & vbTab & "private " & ColumnType & " _" & ColumnName & GetDefaultValue(ColumnType) & vbCrLf)
            SB.Append(vbTab & vbTab & "[ColumnName()]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 _" & ColumnName & ";" & 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 & "_" & ColumnName & " = 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>


生成后的代码以VB.NET示例:

 

Imports System
Imports System.Data
Imports EagleFlyFCL.Data

Namespace ModelNamespace Model

 
<Serializable()>Public Class CategoriesEntityClass CategoriesEntity
        
    
Public Sub New()Sub New()
        
'ToDo
    End Sub
    
    
Private _categoryID As Integer=0 
    
<ColumnName()> Public Property CategoryID()Property CategoryID() As Integer
        
Get
            
Return _categoryID
        
End Get
        
Set(ByVal Value As Integer)
            _categoryID 
= Value
        
End Set
    
End Property

    
Private _categoryName As String= ""
    <ColumnName()> Public Property CategoryName()Property CategoryName() As String
        
Get
            
Return _categoryName
        
End Get
        
Set(ByVal Value As String)
            _categoryName 
= Value
        
End Set
    
End Property

    
Private _description As String= ""
    <ColumnName()> Public Property Description()Property Description() As String
        
Get
            
Return _description
        
End Get
        
Set(ByVal Value As String)
            _description 
= Value
        
End Set
    
End Property

        
Private _picture As Byte()
    
<ColumnName()> Public Property Picture()Property Picture() As Byte()
        
Get
            
Return _picture
        
End Get
        
Set(ByVal Value As Byte())
            _picture 
= Value
        
End Set
    
End Property

    
Private _startDate As DateTime=System.DateTime.Now 
    
<ColumnName()> Public Property StartDate()Property StartDate() As DateTime
        
Get
            
Return _startDate
        
End Get
        
Set(ByVal Value As DateTime)
            _startDate 
= Value
        
End Set
    
End Property

    
Private _amount As Integer=0 
    
<ColumnName()> Public Property Amount()Property Amount() As Integer
        
Get
            
Return _amount
        
End Get
        
Set(ByVal Value As Integer)
            _amount 
= Value
        
End Set
    
End Property

    
Private _isBuy As Boolean=False 
    
<ColumnName()> Public Property IsBuy()Property IsBuy() As Boolean
        
Get
            
Return _isBuy
        
End Get
        
Set(ByVal Value As Boolean)
            _isBuy 
= Value
        
End Set
    
End Property

    
Private _price As Double=0 
    
<ColumnName()> Public Property Price()Property Price() As Double
        
Get
            
Return _price
        
End Get
        
Set(ByVal Value As Double)
            _price 
= Value
        
End Set
    
End Property


    
End Class

End Namespace

posted @ 2005-09-03 16:55 鹰翔 阅读(7249) 评论(12) 编辑

前一段时间看了一下有关Python的资料,感觉真不错,很喜欢它的语法,即简洁又强大,特别是它的列表内涵功能,真的是不错.

举个例子
如果要产生一个新的列表,这个列表是从1-10中取出所有偶数再乘3,这个过程只要一行语句就可完成
[a*3 for a in range(1,11) if a%2==0]
执行后就可得到6, 12, 18, 24, 30,

再有,如果要取出一个文本文件中的所有行,可以这样
[line for line in open("c:\str.txt").readlines()]

上面的操作如果是用VB或C#,就得要好几行语句,所以,可以显示出python语言的简单和强大.

IronPython是Python语言的一个.NET实现,现在的版本是0.9.1,真希望能尽快出1.0呀.

用IronPython写了几个小程序,但感觉没有一个好的编辑器,所以我就用ICSharpCode.TextEditor控件和IronPython写了一个小的代码编辑器,支持语法着色,支持文件拖放(要把文件拖到状态栏中就可以了),代码片断保存及插入等功能等等...

这个并不是一个完善的编辑器,很多功能还没做完,不过已经可以完成一些基本功能了,希望能对你有点用.


下载:http://files.cnblogs.com/EagleFly/irpy.rar
文件解压后运行run.bat就可以了.


posted @ 2005-09-03 10:57 鹰翔 阅读(1817) 评论(8) 编辑