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