MVC.net + subsonic自动生成TT的MetaData类

时间:2010-02-23 20:51:23

标签: asp.net asp.net-mvc asp.net-mvc-2 subsonic subsonic3

不是问题,但我没有博客,我刚刚创建了一个新的亚音速TT文件 这将为亚音阶类自动生成元数据类,以便您可以 在使用dataAnnotation和CreateForModel等时跳过一些工作

所以第一步是使用以下

修改ActiveRecord.TT
using System.ComponentModel; 
using System.Data.Common; 
using System.ComponentModel.DataAnnotations;

然后在类名的生成之上,我们需要引用我们的元数据 像这样:

[MetadataType(typeof(<#=tbl.ClassName#>MetaData))]
public partial class <#=tbl.ClassName#>: IActiveRecord

那些为ActiveRecord.tt完成的一切

现在您的MetaGenerator TT位于下方,请注意我的包含是针对MySql的 您需要修改此行以考虑您的数据库类型

<#@ include file="MySQL.ttinclude" #>  
using System;  
using System.ComponentModel;  
using System.ComponentModel.DataAnnotations;  

namespace <#=Namespace #>  
{  
<#  
var tables = LoadTables();  
foreach(Table tbl in tables)  
{  
if(!ExcludeTables.Contains(tbl.Name))  
{  
#>  
public class <#=tbl.ClassName#>MetaData  
{  
<# foreach(Column col in tbl.Columns)  
{  
if (tbl.ClassName == col.CleanName)  
{  
col.CleanName += "X";  
} #>    
[DisplayName("<#=col.CleanName #>: ")]   
<# if(String.IsNullOrEmpty(CheckNullable(col))) { #>  
[Required(ErrorMessage = "<#=col.CleanName #> is a required element.")] <# }      
#>          
public <#=col.SysType #><#=CheckNullable(col)#> <#=col.CleanName #>  { get;set; }  
<#    
}   
#>  
}  
<# }  
} #>   
}  

我添加了一个小支票以查看该项目是否可以为空,如果没有,那么我正在添加 必要的元素。

现在这并不出色,但对于大型数据库来说,它会说相当多的工作 使用editorFor等是一种很好的方法,可以在不考虑页面的情况下删除页面。

为创建或编辑创建强类型视图时,我引用了 MetaData类而不是亚音阶类,一切都是飞机航行

将此添加到您自己的自定义编辑的CodeTemplates中,您真的不需要做太多 在创建母版页后,在Html方面。

无论如何,请确保它对一个人有用!

1 个答案:

答案 0 :(得分:2)

在这里的文档上做了更好的版本 Subsonic TT Extension for Subsonic Buddy Classes