欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

動軟代碼生成器教程——懶人有福了

系統(tǒng) 1976 0

很多時候項目必須是三層架構(gòu)模式,但是很多繁瑣的代碼讓多數(shù)程序員鬧心……那有沒有一個省時省力的工具快速的幫我們搞定三層架構(gòu)呢?回答是肯定的,很早之前技術(shù)牛人李天平就開發(fā)出了這么一款工具,目前該工具還在不斷的更新,更多的功能也出現(xiàn)了。實在是讓那些老鳥們省了不少力氣。

廢話不多時,看教程。

一. 功能介紹
動軟代碼生成器 是一款為程序員設(shè)計的全功能自動代碼生成器,也是一個智能化軟件開發(fā)平臺,它可以生成基于面向?qū)ο蟮乃枷牒腿龑蛹軜?gòu)設(shè)計的代碼,結(jié)合了軟件開發(fā)中經(jīng)典的思想和設(shè)計模式,融入了工廠模式,反射機制等等一些思想。主要實現(xiàn)在對應(yīng)數(shù)據(jù)庫中表的基類代碼的自動生成,包括生成屬性、添加、修改、刪除、查詢、存在性、Model類構(gòu)造等基礎(chǔ)代碼片斷,支持不同架構(gòu)代碼生成,使程序員可以節(jié)省大量機械錄入的時間和重復(fù)勞動,而將精力集中于核心業(yè)務(wù)邏輯的開發(fā)。新版本中除了程序集組件模板,也同樣支持用戶自定義文本模板,像寫ASPX代碼一樣寫模板,一鍵代碼生成,更方便,更靈活。
動軟讓軟件開發(fā)變得輕松而快樂!讓企業(yè)不斷提升開發(fā)效率,同樣的時間創(chuàng)造出更大的價值。
二. 下載安裝
1. 系統(tǒng)要求: Microsoft Windows2000/XP/2003/7 或者更高。機器必須安裝.NET Framework v2.0。
2. 官方下載地址: http://www.maticsoft.com/download.aspx
3. 下載解壓后安裝包有如下文件:
Codematic2.msi 是動軟.NET代碼生成器的安裝文件。
Builder文件夾是代碼生成插件的源碼,動軟.NET代碼生成器支持可擴展的代碼生成插件,用戶可以定制自己的代碼生成的插件,根據(jù)接口開發(fā)自己的代碼生成方式,按自己的需求進(jìn)行代碼生成。
Codematic_Data.MDF和Codematic_Log.LDF 是通過動軟新建項目中所帶管理模塊所需要的數(shù)據(jù)庫文件。后臺管理員默認(rèn)登錄用戶名:admin 密碼:1
4. 雙擊Codematic2.msi 進(jìn)行直接安裝即可。
安裝動軟時,如果用戶機器360彈出警告,那僅僅是個簽名認(rèn)證提示,并非木馬,選擇“繼續(xù)安裝”,然后點擊“確定”即可。
動軟鄭重聲明: 動軟.NET代碼生成器,絕無插件木馬,純綠色軟件。請放心安裝。
5. 安裝成功后,在開始-菜單和桌面上會有動軟.NET代碼生成器的圖標(biāo)。


三. 模板代碼生成
1. 在左側(cè)【數(shù)據(jù)庫視圖】,選中表,右鍵菜單【模板代碼生成】
2. 然后,出現(xiàn)單表的代碼生成器界面,我們設(shè)置自己需要更改的信息
備注:代碼還有一些生成規(guī)則,是在菜單【工具】-【選項】-【代碼生成設(shè)置】中進(jìn)行設(shè)置。
3. 然后,點擊工具欄【生成代碼】或者【生成代碼】按鈕,即可生成該類的代碼。生成的代碼,可以直接復(fù)制到項目文件中,也可以右鍵保存成CS文件。通過窗體下面的Tab按鈕可以來回切換設(shè)計視圖和代碼。
4. 設(shè)置模板目錄
5. 模板保存

四. 模板代碼批量生成
1. 選中數(shù)據(jù)庫或者表,然后單擊右鍵菜單【模板代碼批量生成】
2. 出現(xiàn)的窗口和新建項目基本相似,只是多了一個選中架構(gòu)的選項:
3. 選則要生成的表,然后點擊【導(dǎo)出】。
4. 在生成的文件夾中,我們可以看到:
批量生成代碼只生成業(yè)務(wù)表的代碼,不再有解決方案文件和項目文件,以及其它類庫等。我們可以將生成的這些文件直接拖到現(xiàn)有的解決方案中即可


五. 代碼生成規(guī)則設(shè)置
打開菜單【工具】-【選項】-【代碼生成設(shè)置】
這些配置保存后,在生成代碼的時候?qū)凑者@個規(guī)則進(jìn)行生成。
代碼生成的規(guī)則設(shè)置范圍還在不斷增加中。
另外,不同數(shù)據(jù)庫類型的數(shù)據(jù)類型各有不同,這里提供了字段類型和C#中的類型建立映射關(guān)系,生成代碼時將按映射關(guān)系來生成代碼字段屬性的類型。

六. 模板編寫教程
模板的大體分為5塊內(nèi)容:模板指令聲明,代碼語句塊,表達(dá)式塊,類功能控制塊,文本塊輸出。下面我們分別來介紹一下這5塊內(nèi)容的語法和使用說明。
1. 模板指令聲明塊 <#@ #>
和ASP.NET頁面的指令一樣,它們出現(xiàn)在文件頭,通過<#@?#>表示。其中<#@ template ?#>指令是必須的,用于定義模板的基本屬性。
(1) 模板指令
<#@ template [language="VB"] [hostspecific="true"] [debug="true"] [inherits="templateBaseClass"] [culture="code"] [compilerOptions="options"] #>
例如 <#@ template language="C#v3.5" hostSpecific="true" debug="true" #>
Language 這里可以指定模板使用的語言。
hostSpecific="true" 表示是否使用特定的host,host里面包含了模板使用的各種對象。
注意:
所有屬性值必須用雙引號都括起來。如果值本身包含引號,則必須使用 \ 字符對這些引號進(jìn)行轉(zhuǎn)義。 指令通常是模板文件或包含的文件中的第一個元素。
(2) 參數(shù)指令 <#@ parameter type="Full.TypeName" name="ParameterName" #>
(3) 輸出指令 <#@ output extension=".fileNameExtension" encoding="encoding" #>
output extension=".cs" 指定生成文件的擴展名。
encoding="encoding" 指定生成文件的編碼。
(4) 程序集指令 <#@ assembly name="System.Data" #>
用于添加程序集引用,如果要使用第三方程序集,那么最好在項目中添加引用。
注:您應(yīng)使用絕對路徑的名稱,或者路徑名稱中使用標(biāo)準(zhǔn)的宏的名稱。
例如: <#@ assembly name="$(SolutionDir)library\MyAssembly.dll" #>
(5) 導(dǎo)入指令 <#@ import namespace="System.Data" #>
導(dǎo)入要使用的命名空間,注意:這里的命名空間必須要在前面指定的程序集里面找得到的,比如我指定命名空間"System.Data","System.Data.Common",這些在程序集System.Data中都有的
(6) 包含指令 <#@ include file="test.tt" #> 導(dǎo)入模板,類似Html的include用法
include 指令插入其他模板文件的文本。
例如,下面的指令插入 test.txt 的內(nèi)容。 <#@ include file="c:\test.txt" #>
在處理時,被包含內(nèi)容就像是包含文本模板的組成部分一樣。 不過,即使 include 指令后跟普通文本塊和標(biāo)準(zhǔn)控制塊,也可以包含編寫有類功能塊 <#+...#> 的文件

2. 代碼語句塊: <# #>
在模板文件中,可以混合使用任意數(shù)量的文本塊和標(biāo)準(zhǔn)控制塊。中間是一段通過相應(yīng)編程語言編寫的程序調(diào)用,我們可以通過代碼語句快控制文本轉(zhuǎn)化的流程。
注意:不能在控制塊中嵌套控制塊。
<#@ output extension=".txt" #>
<#
for(int i = 0; i < 4; i++)
{
#>
Hello!
<#
}
#>


3. 表達(dá)式塊:<#= #>
表達(dá)式控制塊計算表達(dá)式并將其轉(zhuǎn)換為字符串。 該字符串將插入到輸出文件中。
例如: <#= 2 + 3 #>
表達(dá)式可以包含作用域中的任何變量。 例如,下面的塊輸出數(shù)字行:
<#@ output extension=".txt" #>
<#
for(int i = 0; i < 4; i++)
{
#>
This is hello number <#= i+1 #>: Hello!
<#
}
#>


4. 類功能控制塊:<#+ #>
如果文本轉(zhuǎn)化需要一些比較復(fù)雜的邏輯,我們需要寫在一個單獨的輔助方法中,甚至是定義一些單獨的類,我們就是將它們定義在類特性塊中。類功能控制塊定義屬性、方法或不應(yīng)包含在主轉(zhuǎn)換中的所有其他代碼。 類功能塊常用于編寫幫助器函數(shù)。 通常,類功能塊位于單獨的文件中,這樣它們可以包含在多個文本模板中。 類功能控制塊以 <#+ ... #> 符號分隔。
例如,下面的模板文件聲明并使用一個方法:
<#@ output extension=".txt" #>
Squares:
<#
for(int i = 0; i < 4; i++)
{
#>
The square of <#= i #> is <#= Square(i+1) #>.
<# #>
That is the end of the list.
<#+ // Start of class feature block
private int Square(int i)
{
return i*i;
}
#>
類功能必須編寫在文件末尾。不過,即使 include指令后跟標(biāo)準(zhǔn)塊和文本,也可以 < #@include #> 包含類功能的文件。例如下面代碼則會報錯:
List of Squares:
<#
for(int i = 0; i < 4; i++)
{ WriteSquareLine(i); }
#>
End of list.
<#+ // Class feature block
private void WriteSquareLine(int i)
{
#>
The square of <#= i #> is <#= i*i #>.
<#
}
#>


5. 文本塊輸出
可以使用 Write() 和 WriteLine() 方法在標(biāo)準(zhǔn)代碼塊內(nèi)追加文本,而不必使用表達(dá)式代碼塊。 它們可幫助縮進(jìn)輸出和報告錯誤。
下面兩個代碼塊在功能上是等效的。
包含表達(dá)式塊的代碼塊
<#
int i = 10;
while (i-- > 0)
{ #>
<#= i #>
<# }
#>
使用 WriteLine() 的代碼塊
<#
int i = 10;
while (i-- > 0)
{
WriteLine((i.ToString()));
}
#>
Write() 和 WriteLine() 方法有兩個重載,其中一個重載接受單個字符串參數(shù),另一個重載接受一個復(fù)合格式字符串以及將包含在字符串中的對象數(shù)組(與 Console.WriteLine() 方法類似)。
下面兩種 WriteLine() 用法在功能上是等效的:
<#
string msg = "Say: {0}, {1}, {2}";
string s1 = "hello";
string s2 = "goodbye";
string s3 = "farewell";
WriteLine(msg, s1, s2, s3);
WriteLine("Say: hello, goodbye, farewell");
#>
設(shè)置文本模板輸出縮進(jìn)的格式。
CurrentIndent 字符串屬性顯示文本模板中的當(dāng)前縮進(jìn),該類還具有一個 indentLengths 字段,該字段是已添加的縮進(jìn)的列表。
PushIndent() 方法增加縮進(jìn),
PopIndent() 方法減少縮進(jìn)。
ClearIndent() 方法,刪除所有縮進(jìn)。
下面的代碼塊演示這些方法的用法:
<#
WriteLine(CurrentIndent + "Hello");
PushIndent(" ");
WriteLine(CurrentIndent + "Hello");
PushIndent(" ");
WriteLine(CurrentIndent + "Hello");
ClearIndent();
WriteLine(CurrentIndent + "Hello");
PushIndent(" ");
WriteLine(CurrentIndent + "Hello");
#>
此代碼塊產(chǎn)生以下輸出:
Hello
Hello
Hello
Hello
Hello
可以使用錯誤和警告實用工具方法向 Visual Studio 錯誤列表添加消息。 例如,下面的代碼向錯誤列表添加一條錯誤消息。
<#
try
{
string str = null;
Write(str.Length.ToString());
}
catch (Exception e)
{
Error(e.Message);
}
#>


7. 模板示例講解


8. Host對象屬性列表
Host提供了一下屬性和方法,方便編寫模板時調(diào)用。 TableHost屬性 類型 說明 DbName string 當(dāng)前數(shù)據(jù)庫名。
DbType
string
當(dāng)前數(shù)據(jù)庫類型:SQL2000,SQL2005,SQL2008,Oracle,OleDb,MySQL,SQLite TableList List<TableInfo> 當(dāng)前數(shù)據(jù)庫所有的表集合,返回List<TableInfo>
ViewList
List<TableInfo>
當(dāng)前數(shù)據(jù)庫所有的視圖集合,返回List<TableInfo> ProcedureList List<TableInfo> 當(dāng)前數(shù)據(jù)庫所有的存儲過程集合,返回List<TableInfo>
DbHelperName
string
數(shù)據(jù)庫訪問類名,例如:DbHelperSQL ProjectName string 項目名稱
ProcPrefix
string
存儲過程前綴,例如sp_ ModelPrefix string Model類名前綴
ModelSuffix
string
Model類名后綴 BLLPrefix string BLL類名前綴
BLLSuffix
string
BLL類名后綴 DALPrefix string DAL類名前綴
DALSuffix
string
DAL類名后綴 TabNameRule string 類命名規(guī)則: same(保持原樣) lower(全部小寫) upper(全部大寫) 工具-選項-代碼生成設(shè)置中進(jìn)行設(shè)置。
DbParaDbType
string
得到數(shù)據(jù)庫字段DbType的類名。例如:SqlDbType preParameter string 當(dāng)前數(shù)據(jù)庫類型對應(yīng)的存儲過程參數(shù)符號,例如:@
Folder
string
所屬文件夾 TableName string 表名
TableDescription
string
表的描述信息 Fieldlist List<ColumnInfo> 字段集合
Keys
List<ColumnInfo>
主鍵字段集合 IdentityKey ColumnInfo 自動增長標(biāo)識列;如果沒有則返回null。

9. Host對象方法列表
TableHost方法 說明 string GetModelClass(string TabName) 組合得到Model類名: 前綴+類名+后綴
string GetBLLClass(string TabName)
組合得到BLL類名: 前綴+類名+后綴 string GetDALClass(string TabName) 組合得到DAL類名: 前綴+類名+后綴

10. TableInfo 表對象屬性
屬性 類型 說明 TabName string 表名稱
TabUser
string
用戶對象 TabType string 表類型
TabDate
string
創(chuàng)建日期


11. ProcedureHost 表對象屬性
屬性 類型 說明 ProcedureName string 表名稱
Parameterlist
List<ColumnInfo>
參數(shù)列表 OutParameter ColumnInfo 輸出參數(shù)字段信息


12. ColumnInfo 字段信息對象
屬性 類型 說明 ColumnOrder string 序號
ColumnName
string
字段名 TypeName string 字段類型
Length
string
長度 Precision string 精度
Scale
string
小數(shù)位數(shù) IsIdentity bool 是否是標(biāo)識列
IsPrimaryKey
bool
是否是主鍵 Nullable bool 是否允許空
DefaultVal
string
默認(rèn)值 Description string 備注


13. CodeCommon工具類常用方法 CodeCommon方法 說明
string DbTypeToCS(string dbtype) 得到“數(shù)據(jù)庫字段類型”對應(yīng)的“c#類型”
bool isValueType(string cstype)
是否C#中的值(可空)類型 string DbTypeLength(string dbtype,string datatype, string Length) 得到數(shù)據(jù)庫字段DbType的類型和長度
ColumnInfo GetIdentityKey(List<ColumnInfo> keys)
得到自動增長標(biāo)識列字段 string DbParaDbType(string DbType) 得到不同數(shù)據(jù)庫DbType類名,例如SqlDbType
string preParameter(string DbType)
得到不同數(shù)據(jù)庫的存儲過程參數(shù)符號,例如:@ string GetWhereParameterExpression(List<ColumnInfo> keys, bool IdentityisPrior, string DbType) 得到Where條件語句 - Parameter方式 (例如:用于Exists Delete GetModel 的where) 例如:where NewsId=@NewsId
string GetPreParameter(List<ColumnInfo> keys, bool IdentityisPrior, string DbType)
生成sql語句中的參數(shù)列表(例如:用于 Exists Delete GetModel 的where參數(shù)賦值) string GetInParameter(List<ColumnInfo> keys, bool IdentityisPrior) 得到方法輸入?yún)?shù)定義的列表 (例如:用于Exists Delete GetModel 的參數(shù)傳入)
string GetFieldstrlist(List<ColumnInfo> keys, bool IdentityisPrior)
字段的 select 列表,和方法傳遞的參數(shù)值 string GetWhereExpression(List<ColumnInfo> keys, bool IdentityisPrior) 得到Where條件語句 - SQL方式 (例如:用于Exists Delete GetModel 的where)
string GetModelWhereExpression(List<ColumnInfo> keys, bool IdentityisPrior)
得到Where條件語句 - SQL方式 (例如:用于Exists Delete GetModel 的where) string CutDescText( string descText,int cutLen,string ReplaceText) 字符串描述截取:要截取的字符串,長度,替代字符串。
輸出效果模板代碼:(復(fù)制到模板代碼生成器中執(zhí)行即可看到效果)
<#@ template language="c#" HostSpecific="True" #>
<#@ output extension= ".cs" #>
<#
TableHost host = (TableHost)(Host);
ColumnInfo identityKey=host.IdentityKey;
#>
數(shù)據(jù)庫名:<#= host.DbName #>
數(shù)據(jù)庫類型:<#= host.DbType #>
表名:<#= host.TableName #>
表描述:<#= host.TableDescription #>
數(shù)據(jù)庫訪問類名:<#= host.DbHelperName #>
項目名稱:<#= host.ProjectName #>
存儲過程前綴:<#= host.ProcPrefix #>
類命名規(guī)則:<#= host.TabNameRule #>
數(shù)據(jù)庫DbType類名:<#= host.DbParaDbType #>
存儲過程參數(shù)符號:<#= host.preParameter #>
表集合:
<# foreach (TableInfo tab in host.TableList)
{
WriteLine(tab.TabName);
} #>
字段集合:
<# foreach (ColumnInfo c in host.Fieldlist)
{
WriteLine("public {0} {1} {{ get; set; }}",CodeCommon.DbTypeToCS(c.TypeName),c.ColumnName );
} #>
字段集合增加連接符號:
<# for(int i=0;i< host.Keys.Count;i++)
{ ColumnInfo key = host.Keys[i]; #>
<# if (key.IsPrimaryKey || !key.IsIdentity)
{#>
strSql.Append(" <#= key.ColumnName#> = <#=preParameter#><#=key.ColumnName#> <# if (i< host.Keys.Count-1 ) {#>and <#}#> ");
<#}#>
<# }#>
主鍵字段集合集合:
<# foreach (ColumnInfo c in host.Keys)
{
WriteLine("public {0} {1} {{ get; set; }}",CodeCommon.DbTypeToCS(c.TypeName),c.ColumnName );
} #>
Model類名:<#= host.GetModelClass(host.TableName) #>
BLL類名:<#= host.GetBLLClass(host.TableName) #>
DAL類名:<#= host.GetDALClass(host.TableName) #>
<#= CodeCommon.DbParaDbType(host.DbType) #>
<#= CodeCommon.preParameter(host.DbType) #>
<#= CodeCommon.GetWhereParameterExpression(host.Keys,true,host.DbType) #>
<#= CodeCommon.GetPreParameter(host.Keys,true,host.DbType) #>
<#= CodeCommon.GetInParameter(host.Keys,true) #>
<#= CodeCommon.GetFieldstrlist(host.Keys,true) #>
<#= CodeCommon.GetWhereExpression(host.Keys,true) #>

其他詳細(xì)教程見開發(fā)者李天平博客: http://www.cnblogs.com/ltp/archive/2011/05/25/2057151.html

動軟代碼生成器教程——懶人有福了


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品一区三区 | 日韩欧美亚洲 | 成人福利 | 国产精品资源网站在线观看 | 午夜小视频在线播放 | 婷婷涩五月 | 亚洲午夜日韩高清一区 | 91婷婷 | 国产精品久久久久久久久免费相片 | 日韩欧美精品在线 | 日韩成人性视频 | 色综合五月色婷婷开心 | 精品麻豆cm视频在线看 | 久草视频官网 | 国产精品1区2区3区 国产成人aaa在线视频免费观看 | 国产大陆精品另类xxxx | 一区二区视频在线 | 国产一区久久精品 | 免费大片黄在线观看 | 香港三级台湾三级在线播放徐 | 啪啪免费网站入口链接 | 中文字幕综合在线观看 | 国产精品福利视频手机免费观看 | 高清久久久久 | 亚洲欧洲精品一区二区 | 成人福利视频在线看高清观看 | 天天射影院| 久久久国产视频 | 日本黄色免费观看 | 激情网站免费观看 | www国产 | 丁香花在线电影小说观看 | 免费观看性欧美大片无片 | 亚洲一区二区三区四区在线观看 | 九九热中文字幕 | 日韩精品久久一区二区三区 | 久久久99精品免费观看 | 午夜精品视频在线观看 | 日本精品一区二区三区四区 | 国产视频1 | 99热这里有免费国产精品 |