<#if(Config.RenderGenEntity){#>
static <#=Table.Alias#>()
{
// 用于引发基类的静态构造函数,所有层次的泛型实体类都应该有一个
TEntity entity = new TEntity();
}<#
}#>
/// <summary>验证数据,通过抛出异常的方式提示验证失败。</summary>
/// <param name="isNew"></param>
public override void Valid(Boolean isNew)
{
// 这里验证参数范围,建议抛出参数异常,指定参数名,前端用户界面可以捕获参数异常并聚焦到对应的参数输入框
//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.Alias;
// 处理时间
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.Account;<#
}
}
#>
}
///// <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}<#=Table.DisplayName#>数据……", typeof(<#=Config.RenderGenEntity?"TEntity":Table.Alias#>).Name);
// var entity = new <#=Table.Alias#>();<#
foreach (IDataColumn dc in Table.Columns)
{
if(dc.Identity)continue;
if(dc.DataType==typeof(Int32)){#>
// entity.<#=dc.Alias#> = 0;<#}
else if(dc.DataType==typeof(String)){#>
// entity.<#=dc.Alias#> = "abc";<#}
else if(dc.DataType==typeof(DateTime)){#>
// entity.<#=dc.Alias#> = DateTime.Now;<#}
else if(dc.DataType==typeof(Double)){#>
// entity.<#=dc.Alias#> = 0;<#}
else if(dc.DataType==typeof(Boolean)){#>
// entity.<#=dc.Alias#> = true;<#}
else if(dc.DataType==typeof(Decimal)){#>
// entity.<#=dc.Alias#> = 0;<#}
else if(dc.DataType==typeof(Guid)){#>
// entity.<#=dc.Alias#> = Guid.NewGuid();<#}
else{#>
// entity.<#=dc.Alias#> = <#=TypeX.CreateInstance(dc.DataType)#>;<#}
}#>
// entity.Insert();
// if (XTrace.Debug) XTrace.WriteLine("完成初始化{0}<#=Table.DisplayName#>数据!", typeof(<#=Config.RenderGenEntity?"TEntity":Table.Alias#>).Name);
//}
<#
if(Table.Relations!=null && Table.Relations.Count>0)
{
// 是否有一对多和一对一的扩展属性,如果有,删除
Boolean hasMutil=false;
foreach(IDataRelation dr in Table.Relations)
{
if(!dr.Unique) continue;
IDataTable rtable = FindTable(dr.RelationTable);
if (rtable == null) continue;
hasMutil=true;
break;
}
if(hasMutil)
{
#>
/// <summary>已重载。删除关联数据</summary>
/// <returns></returns>
protected override int OnDelete()
{<#
foreach(IDataRelation dr in Table.Relations)
{
if(!dr.Unique) continue;
IDataTable rtable = FindTable(dr.RelationTable);
if (rtable == null) continue;
Boolean b=dr.Unique;
// 如果是唯一的,应该判断对方的唯一性,如果对方也是唯一,那么就构成一对一
if(b&&rtable.Relations!=null)
{
foreach(IDataRelation dr2 in rtable.Relations)
{
if(dr2.Column==dr.RelationColumn && dr2.RelationTable==Table.Name && dr2.RelationColumn==dr.Column)
{
if(dr2.Unique) b=false;
}
}
}
String proName=rtable.Alias;
if(b) proName+="s";
#>
if (<#=proName#> != null) <#=proName#>.Delete();<#
}
#>
return base.OnDelete();
}<#
}
}#>
///// <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();
//}
|