首页 > 代码库 > CodeMatic动软自动生成Nhibernate
CodeMatic动软自动生成Nhibernate
前两天调查了下自动生成工具MyGeneration和codesmith前一个版本已经不更新了后面一个太高级生成
的代码包含了太多东西,没整明白。不过生成的xmlmapping很强大。所以干脆整合一下codesmith和动
软的pojo。现版本的动态默认带了nhibernate的模版表设计的时候最好不要带下划线之类的
一、配置下要用的namespace和表名大小写
二、因为我用的是mysql所以表名默认在windows环境下是小写,不符合编码的规范,所以小改了下模版把首字母大写其它小写参照
View plaincopyprint?<#@ template language="c#" HostSpecific="True" #> <#@ output extension= ".cs" #> <# TableHost host = (TableHost)(Host); host.Fieldlist.Sort(CodeCommon.CompareByintOrder); #>using System; //Nhibernate Code Generation Template 1.0//author:MythXin//blog:www.cnblogs.com/MythXin//Entity Code Generation Templatenamespace <#= host.NameSpace #>.Entity<# if( host.Folder.Length > 0) {#>.<#= host.Folder #><# } #> { <# if( host.TableDescription.Length > 0) {#> //<#= host.TableDescription #><# } #> [Serializable] public class <#= host.GetModelClass(host.TableName.Substring(0, 1).ToUpper() + host.TableName.Substring(1).ToLower()) #> : EntityBase { <# foreach (ColumnInfo c in host.Fieldlist) { #>/// <summary>/// <#= string.IsNullOrEmpty(c.Description) ? c.ColumnName : c.Description #>/// </summary>public virtual <#= CodeCommon.DbTypeToCS(c.TypeName) #><# if(c.Nullable) { #><#if(CodeCommon.isValueType(CodeCommon.DbTypeToCS(c.TypeName ))){ #>?<# }#><# }#> <#= c.ColumnName.Substring(0, 1).ToUpper() + c.ColumnName.Substring(1).ToLower() #> { get; set; } <# } #> } }
<#@ template language="c#" HostSpecific="True" #><#@ output extension= ".cs" #><# TableHost host = (TableHost)(Host); host.Fieldlist.Sort(CodeCommon.CompareByintOrder);#>using System;//Nhibernate Code Generation Template 1.0//author:MythXin//blog:www.cnblogs.com/MythXin//Entity Code Generation Templatenamespace <#= host.NameSpace #>.Entity<# if( host.Folder.Length > 0) {#>.<#= host.Folder #><# } #>{ <# if( host.TableDescription.Length > 0) {#> //<#= host.TableDescription #> <# } #> [Serializable] public class <#= host.GetModelClass(host.TableName.Substring(0, 1).ToUpper() + host.TableName.Substring(1).ToLower()) #> : EntityBase { <# foreach (ColumnInfo c in host.Fieldlist) { #>/// <summary> /// <#= string.IsNullOrEmpty(c.Description) ? c.ColumnName : c.Description #> /// </summary> public virtual <#= CodeCommon.DbTypeToCS(c.TypeName) #><# if(c.Nullable) { #><#if(CodeCommon.isValueType(CodeCommon.DbTypeToCS(c.TypeName))){ #>?<# }#><# }#> <#= c.ColumnName.Substring(0, 1).ToUpper() + c.ColumnName.Substring(1).ToLower() #> { get; set; } <# } #> }}
java和c#中的substring
如果只有一个参数,意思是一样,取该索引之后的全部字符
如果有2个参数。Java 的substring第二个参数表示索引号,实际取值是索引号的前一位; C# 的Substring方法第二个参数表示取子字符串的长度
host.GetModelClass()方法是动软命名规则里面的设置。比如命名规则设置首字母大写那生成的时候就会首字母大写,但是不满足驼峰形类名所以又修改了下:如果前面没有配置命名规则则把下面的host.GetModelClass()去掉自己ToUpper就可以了
[csharp] view plaincopyprint?
<#@ template language="c#" HostSpecific="True" #> <#@ output extension= ".cs" #> <# TableHost host = (TableHost)(Host); host.Fieldlist.Sort(CodeCommon.CompareByintOrder); #>using System; //Nhibernate Code Generation Template 1.0namespace <#= host.NameSpace #>.Entity<# if( host.Folder.Length > 0) {#>.<#= host.Folder #><# } #> { [Serializable] public class <#= host.GetModelClass(host.TableName.Substring(0, 1).ToUpper()) #><# int index=host.TableName.IndexOf("_"); #><# if(index!=-1){ if(host.TableName.Length>(index+1)){ #><#=host.TableName.Substring(1,index-1)+host.TableName.Substring(index+1,1).ToUpper()+host.TableName.Substring(index+2) #><# }else { } }else { #><#=host.TableName.Substring(1).ToLower() #><# } #> : EntityBase { <# foreach (ColumnInfo c in host.Fieldlist) { #>/// <summary>/// <#= string.IsNullOrEmpty(c.Description) ? c.ColumnName : c.Description #>/// </summary>public virtual <#= CodeCommon.DbTypeToCS(c.TypeName) #><# if(c.Nullable) { #><#if(CodeCommon.isValueType(CodeCommon.DbTypeToCS(c.TypeName ))){ #>?<# }#><# }#> <#= c.ColumnName.Substring(0, 1).ToUpper() + c.ColumnName.Substring(1) #> { get; set; } <# } #> } } <#@ template language="c#" HostSpecific="True" #><#@ output extension= ".cs" #><# TableHost host = (TableHost)(Host); host.Fieldlist.Sort(CodeCommon.CompareByintOrder);#>using System;//Nhibernate Code Generation Template 1.0namespace <#= host.NameSpace #>.Entity<# if( host.Folder.Length > 0) {#>.<#= host.Folder #><# } #>{ [Serializable] public class <#= host.GetModelClass(host.TableName.Substring(0, 1).ToUpper()) #><# int index=host.TableName.IndexOf("_"); #><# if(index!=-1){ if(host.TableName.Length>(index+1)){ #><#=host.TableName.Substring(1,index-1)+host.TableName.Substring(index+1,1).ToUpper()+host.TableName.Substring(index+2) #><# }else { } }else { #><#=host.TableName.Substring(1).ToLower() #><# } #> : EntityBase { <# foreach (ColumnInfo c in host.Fieldlist) { #>/// <summary> /// <#= string.IsNullOrEmpty(c.Description) ? c.ColumnName : c.Description #> /// </summary> public virtual <#= CodeCommon.DbTypeToCS(c.TypeName) #><# if(c.Nullable) { #><#if(CodeCommon.isValueType(CodeCommon.DbTypeToCS(c.TypeName))){ #>?<# }#><# }#> <#= c.ColumnName.Substring(0, 1).ToUpper() + c.ColumnName.Substring(1) #> { get; set; } <# } #> }}
还有一个问题就是生成的文件名还是小写的。。。可能要改动软的生成文件的地方
参考:http://www.cnblogs.com/freshman0216/archive/2010/10/02/1840750.html
CodeMatic动软自动生成Nhibernate
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。