<#if(Config.RenderGenEntity){#>
static <#=Table.Name#>()
{
// 用于引发基类的静态构造函数,所有层次的泛型实体类都应该有一个
TEntity entity = new TEntity();
}<#
}#>
///// <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();
//}
///// <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);
// if (isNew || Dirtys[_.Name] || Dirtys[_.DbType]) CheckExist(_.Name, _.DbType);
// if ((isNew || Dirtys[_.Name]) && Exist(_.Name)) throw new ArgumentException(_.Name, "值为" + Name + "的" + _.Name.DisplayName + "已存在!");
//}
<#
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.TableName && dr2.RelationColumn==dr.Column)
{
if(dr2.Unique) b=false;
}
}
}
String proName=rtable.Name;
if(b) proName+="s";
#>
if (<#=proName#> != null) <#=proName#>.Delete();<#
}
#>
return base.OnDelete();
}<#
}
}#>
///// <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.Name#>).Name);
// var entity = new <#=Table.Name#>();
// entity.Name = "admin";
// entity.Password = DataHelper.Hash("admin");
// entity.DisplayName = "管理员";
// entity.RoleID = 1;
// entity.IsEnable = true;
// entity.Insert();
// if (XTrace.Debug) XTrace.WriteLine("完成初始化{0}<#=Table.DisplayName#>数据!", typeof(<#=Config.RenderGenEntity?"TEntity":Table.Name#>).Name);
//}
|