MVC.net + дозвуковая автоматическая генерация классов метаданных из TT - PullRequest
2 голосов
/ 23 февраля 2010

Не вопрос, но у меня нет блога, и я только что создал новый дозвуковой файл 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 Ответ

2 голосов
/ 24 февраля 2010

сделали лучшую версию этого документа здесь Subsonic TT Extension для классов Subsonic Buddy

...