❶ 如何使用CodeSmith批量生成代碼
簡單的說:CodeSmith首先會去資料庫獲取資料庫的結構,如各個表的名稱,表的欄位,表間的關系等等,之後再根據用戶自定義好的模板文件,用資料庫結構中的關鍵字替代模板的動態變數,最終輸出並保存為我們需要的目標文件.好,原理清楚了,就開始實踐吧:
1.運行CodeSmith,可以看到如下界面:
2.CodeSmith是創建模板的地方,首先當然是創建一個模板啦,點擊工具欄最左邊的New Document—C# Template,如圖所示:
3.點擊運行按鈕,運行結果如下:
好,我們來分析為什麼會得到這樣的運行結果吧,點擊運行窗口左下角的Template按鈕返回模板設計窗口,可以發現,只要是沒有被<%%>或者<scriptrunat="template"></script>包含的文字均被直接輸出了,這些以後就要被換成我們分層架構中一些一成不變的模板代碼:
4.好了,簡單了解啦一些CodeSmith的代碼結構,下面就開始用它來生成我們的分層代碼吧,在此我就不介紹分層架構的概念了,不然就偏離主題了.為了能更簡單明了的說明,我們在此就只用CodeSmith生成分層架構的實體層吧.先看看如果我們不使用CodeSmith需要手動敲出哪些代碼:
Major.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Entity
{
publicpartialclass Major
{
publicInt32 MajorID{ get;set; }
publicString Name{ get;set; }
publicString Remark{ get;set; }
}
}
Student.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Entity
{
publicpartialclass Student
{
publicString StudentID{ get;set; }
publicInt32 MajorID{ get;set; }
publicString Name{ get;set; }
publicBoolean Sex{ get;set; }
publicInt32 Age{ get;set; }
publicString Remark{ get;set; }
}
}
我將兩個文件中重復的代碼使用黃色背景色加深了,我們可以發現,如果每個表都要通過手動創建,那麼將有大量的代碼(黃色背景)需要復制粘貼操作,這些操作是繁瑣而沒有任何意義的.因此,我們會希望將黃色背景部分的代碼做成模板,而其他變化的代碼由資料庫的結構動態生成,如此一來,我們就不用再為這些煩人的復制粘貼操作懊惱了.
5.那麼就開始我們的實踐吧,就在剛剛創建好的文件開始吧,先隨意保存到一個目錄下,命名為test.cst,接著刪除多餘的代碼,只保留第一行,該行表明我們的模板使用何種語言,這里我們使用C#.
<%@ CodeTemplateLanguage="C#" TargetLanguage="Text" Src="" Inherits=""Debug="False" CompilerVersion="v3.5"Description="Template description here."%>
6.參照CodeSmith的工作原理,我們首先要為CodeSmith提供一個資料庫,要怎麼使它和sql Server 2005關聯起來呢?只要加上下面的代碼就行了:
<%-- 載入訪問資料庫的組件SchemaExplorer,並聲明其使用的命名空間 --%>
<%@ AssemblyName="SchemaExplorer"%>
<%@ ImportNamespace="SchemaExplorer"%>
<%-- 資料庫 --%>
<%@ PropertyName="SourceDatabase"DeepLoad="True" Optional="False" Category="01. GettingStarted - Required" Description="Database that the tables views, and storedproceres should be based on. IMPORTANT!!! If SourceTables and SourceViews areleft blank, the Entire Database will then be generated."%>
7.好了,有了資料庫連接,接著還需要一個模板,為了便於管理,我們新建一個文件用於設計模板,File—New—Blank Template,並添加如下代碼,最好保存到test.cst所在的文件夾內,命名為Entity.cst:
<%@ CodeTemplateInherits="CodeTemplate"TargetLanguage="Text" Description="NetTiers main template."Debug="True" ResponseEncoding="UTF-8"%>
<%@ AssemblyName="SchemaExplorer" %>
<%@ ImportNamespace="SchemaExplorer" %>
<%-- 要列印的表 --%>
<%@ PropertyName="Table" DeepLoad="True"Optional="False" Category="01. Getting Started - Required"Description="Database that the tables views, and stored proceres shouldbe based on. IMPORTANT!!! If SourceTables and SourceViews are left blank, theEntire Database will then be generated." %>
接著繼續添加如下代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Entity
{
publicpartialclass<%= Table.Name%>
{
<%foreach(ColumnSchema col inTable.Columns){ %>
public<%= col.DataType %><%=col.Name %>{ get;set; }
<% } %>
}
}
<%=Table.Name%> 表示在此處輸出表的名稱
<%foreach(ColumnSchema col in Table.Columns){ %> <% } %> 為循環語句,在{}循環輸出列信息.
<%=col.DataType %> 表示在此處輸出列的類型
<%=col.Name %> 表示在此處輸出列的名稱
如圖所示:
8.模板創建好後,要在test.cst文件中注冊一下,不然人家怎麼知道有你這么一個模板存在呀,在test.cst文件繼續輸入如下代碼:
<%-- 注冊實體層Entity模板 --%>
<%@ RegisterName="EntityTemplate" Template=" Entity.cst"MergeProperties="Flase" ExcludeProperties=""%>
9.好了,模板注冊好了,根據CodeSmith工作原理,我們要結合模板和資料庫結構來批量生成代碼啦,但是我們生成的目標文件要輸出到哪裡呢?這時我們會需要一個用戶自定義屬性,用於設置目標文件的輸出目錄,在test.cst文件的末尾輸入如下代碼:
代碼
10.現在連輸出目錄也有了,該想辦法寫些函數來完成將資料庫架構傳遞給模板的工作啦,在test.cst文件的末尾輸入如下代碼:
代碼
CodeTemplateTemplate = new EntityTemplate(); 就是創建了一個新的模板
foreach(TableSchematable in this. SourceDatabase.Tables){} 表示循環輸出資料庫中的表
Template.SetProperty("Table",table); 就是向模板設置屬性,還記得我們在Entity.cst裡面設置了一個Table屬性嗎,我們就是通過這個方法給這個屬性設值的.
Template.RenderToFile(FileDirectory,true); 表示將Temlate里的內容全部輸出到FileDirectory目錄中,true表示如果文件存在直接覆蓋.
11.函數寫好了,離成功不遠啦,我們在test.cst的最後再添加如下代碼,用於調用剛剛寫好的函數.至此,模板文件的製作已經完成.
<%
//創建實體層Entity類
this.GenerateEntityClasses();
Debug.WriteLine("OK");
%>
12.好啦,現在只要設置我們要導出的資料庫和輸出目錄就可以運行看結果啦,點擊CodeSmith主窗體右下角Properities面板中SourceDatabase屬性欄右側的…按鈕,彈出資料庫設置對話框,我們要在此添加一個新的資料庫連接:
13.點擊Add按鈕,屬性設置如圖,我們選擇的是在前一章用PowerDesigner創建好的PD_test資料庫:
14.點擊OK,回到資料庫選擇對話框,選擇剛剛創建好的資料庫連接:
15.接著是設置目標文件輸出目錄,我在這里設置為桌面的一個新建文件夾:
16.OK,萬事俱備,可以點擊運行按鈕讓CodeSmith為我們批量生成代碼啦:
打開生成的文件,就可以看到我們期待看到的代碼啦:
❷ codesmith怎麼連mysql
你的CodeSmith是(5.0版本)吧?重新下一個5.0.7.0的試試,將其中的MySQL.Data.Dll文件重新復制到CodeSmith下的Bin目錄,再配置測試應該就行了。 PS:CodeSmith將它的bin目錄的許可權全部用戶都禁用了,所以要先打開用戶許可權才能復制進去
❸ CodeSmith中的DbType獲取SQL中的Money類型
你先把這裡面原來有的像是string給刪了,滑鼠放在按時候不是會把他所有的類型給顯示出來的嗎,到時候你就能看到了啊
❹ codesmith 連接sql server2005時,server name下來列表為空是什麼原因
輸入登錄用戶和密碼,連接後就可以出來資料庫列表了
❺ CodeSmith中怎麼連接到其他資料庫中
你可以設置你的公共類的內容
public class SQLHelper
{
public static SqlConnection CreateConnection()
{
string connString="你的資料庫連接字元串";
SqlConnection con = new SqlConnection(connString);
return con;
}
}
你需要使用到的類中的使用方式是:
SqlConnection con = SQLHelper.CreateConnection();
這樣就得到你想要的資料庫連接對象了。