<#if(Config.RenderGenEntity){#>
static <#=Table.Name#>()
{
// 用于引发基类的静态构造函数,所有层次的泛型实体类都应该有一个
TEntity entity = new TEntity();
}<#
}#>
/// <summary>验证数据,通过抛出异常的方式提示验证失败。</summary>
/// <param name="isNew"></param>
public override void Valid(Boolean isNew)
{
// 如果没有脏数据,则不需要进行任何处理
if (!HasDirty) return;
// 这里验证参数范围,建议抛出参数异常,指定参数名,前端用户界面可以捕获参数异常并聚焦到对应的参数输入框
//if (String.IsNullOrEmpty(Name)) throw new ArgumentNullException(_.Name, _.Name.DisplayName + "无效!");
//if (!isNew && ID < 1) throw new ArgumentOutOfRangeException(_.ID, _.ID.DisplayName + "必须大于0!");
// 建议先调用基类方法,基类方法会对唯一索引的数据进行验证
base.Valid(isNew);
// 在新插入数据或者修改了指定字段时进行唯一性验证,CheckExist内部抛出参数异常
//if (isNew || Dirtys[__.Name]) CheckExist(__.Name);
<#
foreach (IDataColumn dc in Table.Columns)
{
String name=dc.Name;
// 处理时间
if(dc.DataType==typeof(DateTime))
{
if (name.StartsWith("Add", StringComparison.OrdinalIgnoreCase)
|| name.StartsWith("Create", StringComparison.OrdinalIgnoreCase)
|| name.StartsWith("New", StringComparison.OrdinalIgnoreCase)
|| name.StartsWith("Insert", StringComparison.OrdinalIgnoreCase))
{
#>
if (isNew && !Dirtys[__.<#=name#>]) <#=name#> = DateTime.Now;<#
}
else if (name.StartsWith("Update", StringComparison.OrdinalIgnoreCase)
|| name.StartsWith("Change", StringComparison.OrdinalIgnoreCase)
|| name.StartsWith("Modify", StringComparison.OrdinalIgnoreCase)
|| name.StartsWith("up", StringComparison.OrdinalIgnoreCase) // Upload
|| name.StartsWith("Save", StringComparison.OrdinalIgnoreCase))
{
#>
if (!Dirtys[__.<#=name#>]) <#=name#> = DateTime.Now;<#
}
}
// 处理IP
else if (dc.DataType==typeof(String)
&& (name.Equals("IP", StringComparison.OrdinalIgnoreCase)
|| name.EndsWith("IP", StringComparison.OrdinalIgnoreCase)&&name.Length>2&&name[name.Length-3]>='a'&&name[name.Length-3]<='z'))
{
#>
if (!Dirtys[__.<#=name#>]) <#=name#> = WebHelper.UserHost;<#
}
// 处理货币
else if (dc.DataType==typeof(Decimal))
{
#>
// 货币保留6位小数
if (Dirtys[__.<#=name#>]) <#=name#> = Math.Round(<#=name#>, 6);<#
}
else if (dc.DataType==typeof(Int32)
&& (name.Equals("UserID", StringComparison.OrdinalIgnoreCase)
|| name.Equals("OperatorID", StringComparison.OrdinalIgnoreCase)))
{
#>
// 处理当前已登录用户信息
if (!Dirtys[__.<#=name#>] && ManageProvider.Provider.Current != null) <#=name#> = (Int32)ManageProvider.Provider.Current.ID;<#
}
else if (dc.DataType==typeof(String)
&& (name.Equals("User", StringComparison.OrdinalIgnoreCase)
|| name.Equals("UserName", StringComparison.OrdinalIgnoreCase)
|| name.Equals("LastUpdate", StringComparison.OrdinalIgnoreCase)
|| name.Equals("LastModify", StringComparison.OrdinalIgnoreCase)
|| name.Equals("Operator", StringComparison.OrdinalIgnoreCase)))
{
#>
// 处理当前已登录用户信息
if (!Dirtys[__.<#=name#>] && ManageProvider.Provider.Current != null) <#=name#> = ManageProvider.Provider.Current.Name;<#
}
}
#>
}
///// <summary>首次连接数据库时初始化数据,仅用于实体类重载,用户不应该调用该方法</summary>
//[EditorBrowsable(EditorBrowsableState.Never)]
//protected override void InitData()
//{
// base.InitData();
// // InitData一般用于当数据表没有数据时添加一些默认数据,该实体类的任何第一次数据库操作都会触发该方法,默认异步调用
// // Meta.Count是快速取得表记录数
// if (Meta.Count > 0) return;
// // 需要注意的是,如果该方法调用了其它实体类的首次数据库操作,目标实体类的数据初始化将会在同一个线程完成
// if (XTrace.Debug) XTrace.WriteLine("开始初始化{0}[{1}]数据……", typeof(<#=Config.RenderGenEntity?"TEntity":Table.Name#>).Name, Meta.Table.DataTable.DisplayName);
// var entity = new <#=Table.Name#>();<#
foreach (IDataColumn dc in Table.Columns)
{
if(dc.Identity)continue;
if(dc.DataType==typeof(Int32)){#>
// entity.<#=dc.Name#> = 0;<#}
else if(dc.DataType==typeof(String)){#>
// entity.<#=dc.Name#> = "abc";<#}
else if(dc.DataType==typeof(DateTime)){#>
// entity.<#=dc.Name#> = DateTime.Now;<#}
else if(dc.DataType==typeof(Double)){#>
// entity.<#=dc.Name#> = 0;<#}
else if(dc.DataType==typeof(Boolean)){#>
// entity.<#=dc.Name#> = true;<#}
else if(dc.DataType==typeof(Decimal)){#>
// entity.<#=dc.Name#> = 0;<#}
else if(dc.DataType==typeof(Guid)){#>
// entity.<#=dc.Name#> = Guid.NewGuid();<#}
else{#>
// entity.<#=dc.Name#> = <#=dc.DataType.CreateInstance()#>;<#}
}#>
// entity.Insert();
// if (XTrace.Debug) XTrace.WriteLine("完成初始化{0}[{1}]数据!", typeof(<#=Config.RenderGenEntity?"TEntity":Table.Name#>).Name, Meta.Table.DataTable.DisplayName);
//}
///// <summary>已重载。基类先调用Valid(true)验证数据,然后在事务保护内调用OnInsert</summary>
///// <returns></returns>
//public override Int32 Insert()
//{
// return base.Insert();
//}
///// <summary>已重载。在事务保护范围内处理业务,位于Valid之后</summary>
///// <returns></returns>
//protected override Int32 OnInsert()
//{
// return base.OnInsert();
//}
|