使用T4為資料庫自動生成實體類(C#)

iDotNetSpace發表於2009-07-20

使用T4為資料庫自動生成實體類(C#)

2009-07-19 18:23 by 心利, 1244 visits, 網摘編輯


T4 (Text Template Transformation Toolkit
是一個基於模板的程式碼生成器。使用T4你可以通過寫一些ASP.NET-like模板,來生成C#, T-SQL, XML等程式碼。

下載示例程式碼 

 Hello World ”程式碼生成器

建立一個C# Console工程,新增一個名為“HelloWorld.tt”的文字檔案。

如果你正在使用Visual Studio 2005你需要安裝 DSL Tools

HelloWorld.tt中新增以下內容

template language="C#" #>

//

// This code was generated by a tool. Any changes made manually will be lost

// the next time this code is regenerated.

//

using System;  

 public class this.ClassName #>

{

   public static void HelloPot()

   {

      Console.WriteLine("Hello World");

   }

}

上面的模板將生成一個名為“HelloWorld”的類,當你儲存HelloWorld.tt時,Visual Studio將為你生成以下程式碼:

使用T4為資料庫自動生成實體類(C#)
// 

// This code was generated by a tool. Any changes made manually will be lost

// the next time this code is regenerated.

// 

using System;   
public class HelloWorld
{
   
public static void HelloPot()
   {
      Console.WriteLine(
"Hello World");
   }
}

新增另一個文字檔案HelloWorld1.tt.,加入以下內容:

    this.ClassName = "HelloWorld1";

#>

include file="HelloT4.tt" #>

通過修改ClassName的值可以更改類名,以上模板將生成一個名為HelloWorld1類。

使用T4為資料庫自動生成實體類(C#)
// 

// This code was generated by a tool. Any changes made manually will be lost

// the next time this code is regenerated.

// 

using System;   

 

public class HelloWorld1
{
   
public static void HelloPot()
   {
      Console.WriteLine(
"Hello World");
   }

}

 

二 資料庫自動生成實體類

這個例項會建立一個模板為資料庫中的每一張表,自動建立相應的實體類。

首先我們需要新增一些程式集引用,名稱空間。

template language="C#debug="Truehostspecific="True" #>

output extension=".cs" #>

assembly name="System.Data" #>

assembly name="System.xml" #>

import namespace="System.Collections.Generic" #>

import namespace="System.Data.SqlClient" #>

import namespace="System.Data" #>

獲取資料庫表結構

           string connectionString = "data source=.""SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=MIAPortal;";

           SqlConnection conn = newSqlConnection(connectionString);

           conn.Open();

           System.Data.DataTable schema = conn.GetSchema("TABLES");

           string selectQuery = "select * from @tableName";

           SqlCommand command = new SqlCommand(selectQuery,conn);

           SqlDataAdapter ad = new SqlDataAdapter(command);

           System.Data.DataSet ds = new DataSet();
我們通過GetSchema("TABLES")獲取了資料庫中所有表的表名,接著通過表名,獲取相應表的表結構。

生成程式碼

template language="C#debug="Truehostspecific="True" #>

output extension=".cs" #>

assembly name="System.Data" #>

 

assembly name="System.xml" #>

import namespace="System.Collections.Generic" #>

import namespace="System.Data.SqlClient" #>

import namespace="System.Data" #>

 using System;

namespace MyProject.Entities

{     

     

           string connectionString = "data source=.""SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=MIAPortal;";

           SqlConnection conn = newSqlConnection(connectionString);

           conn.Open();

           System.Data.DataTable schema = conn.GetSchema("TABLES");

           string selectQuery = "select * from @tableName";

           SqlCommand command = new SqlCommand(selectQuery,conn);

           SqlDataAdapter ad = new SqlDataAdapter(command);

           System.Data.DataSet ds = new DataSet();        

           foreach(System.Data.DataRow row in schema.Rows)

           {  #>  

           public class "TABLE_NAME"].ToString().Trim('s') #>                   

           {                        

                   ds.Tables.Clear();

                  command.CommandText = selectQuery.Replace("@tableName",row["TABLE_NAME"].ToString());

                  ad.FillSchema(ds, SchemaType.Mapped, row["TABLE_NAME"].ToString());         

                  foreach (DataColumn dc in ds.Tables[0].Columns)

                  {    #>                    

                  private  _0].ToString(), dc.ColumnName[0].ToString().ToLower())      #>;                      

                  public 

                  {

                     get { return _0].ToString(), dc.ColumnName[0].ToString().ToLower()) #>; }

                     set { _0].ToString(), dc.ColumnName[0].ToString().ToLower()) #> = value; }

                  }                                                

                       

           }                  

          

           } #>                

}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-609717/,如需轉載,請註明出處,否則將追究法律責任。

相關文章