本框架支持泛型+自定义实体集合进行操作,整个实体操作的思想主要是使用了微软MSDN上的一篇文章:《掌握 ASP.NET 之路:自定义实体类简介》
一、本框架实体操作的特点:
1、一般的实体类操作,均要手工去为每个实体里的属性赋值,如果里面的字段少的话还好说,要是有十几二十个字段,那可要累坏人,当然也可以使用代码生成器完成,但这样生成出来的代码量会非常大。
本框架利用为每个实体类添加索引器以解决以上问题,通过索引器,然后自动为每个字段循环赋值,关于索引器代码可使用生成器生成,但如果使用的是ACCESS数据库,代码生成的索引器就会有问题了,因为在CodeSmith里读出ACCESS的字段顺序会有所不同,我也不知道为什么会这样,郁闷
2、很多时候使用实体类操作时,如果我只需要操作(如更新)某一个字段,但都需要为其他各字段同时赋值,然后再整个实体去更新(至少我使用PetShop4框架时是这样的),这就会感觉非常不方便
本框架已做了相关的控件,可只为需要操作的某个或多个字段进行赋值,不需考虑其他字段
3、要为每个实体类生成独立的操作类方法,非常浪费,因为每个实体都有不同的类型,所以一些增、删、改、查的方法都不能通用
本框架使用了泛型方法将实体封装到集合里,然后再根据传入的实体对象去调用不同的方法,然后动态去生成所需要的SQL语句
二、实体类的使用
本框架基本上以三层架构方式搭建,建议新建立一个实体类的项目(Model),然后再建立一个数据操作项目(DAL)
1、首先使用CodeSmith代码生成器生成所有实体类(放到Model项目里)和相关的操作类(放到DAL项目里,即DEMO里的ModelOperate.cs文件),生成方法可 点击这里查看!
2、将DEMO里的BaseDBOp.cs和ModelCollection.cs文件COPY到你的DAL项目里(注意里面的命名空间要改成你自己项目的)
3、这时可以将项目进行一次编译,如通过编译后再进入下一步
4、在界面层开始调用实体操作方法:
1)先声明实体类和相关的操作方法,声明方法如下:(以下均以本DEMO项目里实体为例)
protected Employees empDS;
protected WType wtypeDS;
protected WType wtypeDS;
这里需要注意的是,实体只是声明,但不要同时进行实例化,这是因为本框架使用了泛型类,过早实例化会取不到实体对象(好像是这个原因吧,呵呵),必须将实例化方法放在Page_Load或者其他函数体内,如以下是实例化的代码:
protected void Page_Load(object sender, EventArgs e)
{
empDS = new Employees();
EmpDSOper = new ModelOperate<Employees>(empDS);
}
{
empDS = new Employees();
EmpDSOper = new ModelOperate<Employees>(empDS);
}
这里要为泛型类传递一个实体对象做为参数
2)现在可以直接使用EmpDSOper对象来操作实体类了,以下是实体操作方法说明:
1/// <summary>
2/// 获取数据列表
3/// </summary>
4/// <param name="tableName">表名</param>
5/// <returns>数据列表</returns>
6public IList GetList(string tableName)
7
8/// <summary>
9/// 获取数据列表
10/// </summary>
11/// <param name="tableName">表名</param>
12/// <param name="strWher">条件语句</param>
13/// <returns>数据列表</returns>
14public IList GetList(string tableName, string strWher)
15
16/// <summary>
17/// 在实体集合里,根据ID获取单个实体
18/// </summary>
19/// <param name="modeList">实体集合</param>
20/// <param name="tableName">实体表名</param>
21/// <param name="fieldID">主键ID</param>
22/// <returns>实体</returns>
23public object GetDSByID(IList modeList, string tableName, int fieldID)
24
25/// <summary>
26/// 通过数据库,根据ID获取单个实体,即直接操作数据库
27/// </summary>
28/// <param name="tableName">实体表名</param>
29/// <param name="fieldID">主键ID</param>
30/// <returns>实体</returns>
31public object GetDSByID(string tableName, int fieldID)
32
33/// <summary>
34/// 获取最大ID
35/// </summary>
36/// <param name="tableName">表名</param>
37/// <returns>最大ID</returns>
38public int GetMaxID(string tableName)
39
40/// <summary>
41/// 数据操作,批量操作
42/// </summary>
43/// <param name="tableName">表名</param>
44/// <param name="opType">操作类型 "insert,update,delete"</param>
45/// <param name="model">实体集合</param>
46/// <param name="isTrans">是否需要事务 true 要;false 否</param>
47/// <param name="strWhere">更新或者删除条件(不需要 where,更新或删除时留空,则默认以当前记录ID为条件进行处理,如需操作所有数据,直接写 '1=1' 即可)</param>
48/// <returns>成功返回1 失败返回0</returns>
49public int OperateDS(string tableName, SqlType opType, IList model, bool isTrans, string strWhere)
50
51/// <summary>
52/// 数据操作,单实体操作
53/// </summary>
54/// <param name="tableName">表名</param>
55/// <param name="opType">操作类型 "insert,update,delete"</param>
56/// <param name="model">实体</param>
57/// <param name="isTrans">是否需要事务 true 要;false 否</param>
58/// <param name="strWhere">更新或者删除条件(不需要 where,更新或删除时留空,则默认以当前记录ID为条件进行处理,如需操作所有数据,直接写 '1=1' 即可)</param>
59/// <returns>insert返回最大的ID,update/delete成功返回1 失败返回0</returns>
60public int OperateDS(string tableName, SqlType opType, object model, bool isTrans, string strWhere)
2/// 获取数据列表
3/// </summary>
4/// <param name="tableName">表名</param>
5/// <returns>数据列表</returns>
6public IList GetList(string tableName)
7
8/// <summary>
9/// 获取数据列表
10/// </summary>
11/// <param name="tableName">表名</param>
12/// <param name="strWher">条件语句</param>
13/// <returns>数据列表</returns>
14public IList GetList(string tableName, string strWher)
15
16/// <summary>
17/// 在实体集合里,根据ID获取单个实体
18/// </summary>
19/// <param name="modeList">实体集合</param>
20/// <param name="tableName">实体表名</param>
21/// <param name="fieldID">主键ID</param>
22/// <returns>实体</returns>
23public object GetDSByID(IList modeList, string tableName, int fieldID)
24
25/// <summary>
26/// 通过数据库,根据ID获取单个实体,即直接操作数据库
27/// </summary>
28/// <param name="tableName">实体表名</param>
29/// <param name="fieldID">主键ID</param>
30/// <returns>实体</returns>
31public object GetDSByID(string tableName, int fieldID)
32
33/// <summary>
34/// 获取最大ID
35/// </summary>
36/// <param name="tableName">表名</param>
37/// <returns>最大ID</returns>
38public int GetMaxID(string tableName)
39
40/// <summary>
41/// 数据操作,批量操作
42/// </summary>
43/// <param name="tableName">表名</param>
44/// <param name="opType">操作类型 "insert,update,delete"</param>
45/// <param name="model">实体集合</param>
46/// <param name="isTrans">是否需要事务 true 要;false 否</param>
47/// <param name="strWhere">更新或者删除条件(不需要 where,更新或删除时留空,则默认以当前记录ID为条件进行处理,如需操作所有数据,直接写 '1=1' 即可)</param>
48/// <returns>成功返回1 失败返回0</returns>
49public int OperateDS(string tableName, SqlType opType, IList model, bool isTrans, string strWhere)
50
51/// <summary>
52/// 数据操作,单实体操作
53/// </summary>
54/// <param name="tableName">表名</param>
55/// <param name="opType">操作类型 "insert,update,delete"</param>
56/// <param name="model">实体</param>
57/// <param name="isTrans">是否需要事务 true 要;false 否</param>
58/// <param name="strWhere">更新或者删除条件(不需要 where,更新或删除时留空,则默认以当前记录ID为条件进行处理,如需操作所有数据,直接写 '1=1' 即可)</param>
59/// <returns>insert返回最大的ID,update/delete成功返回1 失败返回0</returns>
60public int OperateDS(string tableName, SqlType opType, object model, bool isTrans, string strWhere)
具体方法实现,请看相关的页面代码吧,反正代码都在那里了,呵呵。
这里值得说明的是最后1个方法,即OperateDS,我做了一个重载,分别可对实体进行批量(即批量更新、删除等)和单一操作,使用方法在我的DEMO里也有了
基本上实体操作就这些啦,如果大家在使用中遇到什么问题,也欢迎在这里提出来:)
本框架下载地址:
http://bbs.szblogs.com/showtopic-137.html
或者
http://www.cnblogs.com/winsonet/archive/2007/07/31/838253.html