C#发现之旅:基于反射和动态编译的快速ORM框架(下)
2010-09-30 21:08:22 来源:WEB开发网在这里我们首先输出检查参数的代码文本,然后遍历所有绑定字段的属性对象,根据属性的数据类型分为字符串样式,日期样式和其他样式。对于字符串样式则需要输出判断是否为空的代码,对于日期样式则还要考虑BindFieldAttribute特性中指明的数据保存样式,对于其他样式则没有任何判断,直接输出。
生成删除数据的代码
基础类型RecordORMHelper预留了FillDeleteCommand函数,代码生成器自动生成代码来实现FillDeleteCommand函数,而ORM框架就会创建一个数据库命令对象,然后调用FillDeleteCommand函数来为删除数据而初始化数据库命令对象,然后执行SQL命令删除数据。
在DB_Employees中使用一下代码来定义EmployeeID属性的。
///<summary>
/// 字段值 EmployeeID
///</summary>
private System.Int32 m_EmployeeID = 0 ;
///<summary>
/// 字段值 EmployeeID
///</summary>
[BindField("EmployeeID" , Key = true )]
public System.Int32 EmployeeID
{
get
{
return m_EmployeeID ;
}
set
{
m_EmployeeID = value;
}
}
附加的BindField特性中使用了“Key=true”指明了EmployeeID字段是关键字段。于是我们很容易就想到使用SQL语句“Delete From Employees Where EmployeeID=指定的员工编号”来删除数据。于是针对DB_Employees代码生成器生成的代码如下
public override int FillDeleteCommand( System.Data.IDbCommand cmd , object objRecord )
{
if( cmd == null ) throw new ArgumentNullException("cmd");
if( objRecord == null ) throw new ArgumentNullException("objRecord");
MyORM.DB_Employees myRecord = objRecord as MyORM.DB_Employees ;
if( myRecord == null ) throw new ArgumentException("must type 'MyORM.DB_Employees' ");
cmd.Parameters.Clear();
cmd.CommandText = @"Delete From Employees Where EmployeeID = ? " ;
System.Data.IDbDataParameter parameter = null ;
parameter = cmd.CreateParameter();
parameter.Value = myRecord.EmployeeID ;
cmd.Parameters.Add( parameter );
return 1 ;
}
更多精彩
赞助商链接