Winson.Framework的实体操作解说
2007-08-06 21:27 w i n s o n 阅读(2030) 评论(7) 编辑 收藏 举报
Winson.Framework的实体操作解说:
本框架支持泛型+自定义实体集合进行操作,整个实体操作的思想主要是使用了微软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;
这里需要注意的是,实体只是声明,但不要同时进行实例化,这是因为本框架使用了泛型类,过早实例化会取不到实体对象(好像是这个原因吧,呵呵),必须将实例化方法放在Page_Load或者其他函数体内,如以下是实例化的代码:
protected void Page_Load(object sender, EventArgs e)
{
empDS = new Employees();
EmpDSOper = new ModelOperate<Employees>(empDS);
}
这里要为泛型类传递一个实体对象做为参数
2)现在可以直接使用EmpDSOper对象来操作实体类了,以下是实体操作方法说明:
具体方法实现,请看相关的页面代码吧,反正代码都在那里了,呵呵。
这里值得说明的是最后1个方法,即OperateDS,我做了一个重载,分别可对实体进行批量(即批量更新、删除等)和单一操作,使用方法在我的DEMO里也有了
基本上实体操作就这些啦,如果大家在使用中遇到什么问题,也欢迎在这里提出来:)
本框架下载地址:
http://bbs.szblogs.com/showtopic-137.html
或者
http://www.cnblogs.com/winsonet/archive/2007/07/31/838253.html
本框架支持泛型+自定义实体集合进行操作,整个实体操作的思想主要是使用了微软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项目里实体为例)
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
这里需要注意的是,实体只是声明,但不要同时进行实例化,这是因为本框架使用了泛型类,过早实例化会取不到实体对象(好像是这个原因吧,呵呵),必须将实例化方法放在Page_Load或者其他函数体内,如以下是实例化的代码:
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
这里要为泛型类传递一个实体对象做为参数
2)现在可以直接使用EmpDSOper对象来操作实体类了,以下是实体操作方法说明:
1
/// <summary>
2
/// 获取数据列表
3
/// </summary>
4
/// <param name="tableName">表名</param>
5
/// <returns>数据列表</returns>
6
public IList GetList(string tableName)
7![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
8
/// <summary>
9
/// 获取数据列表
10
/// </summary>
11
/// <param name="tableName">表名</param>
12
/// <param name="strWher">条件语句</param>
13
/// <returns>数据列表</returns>
14
public IList GetList(string tableName, string strWher)
15![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
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>
23
public object GetDSByID(IList modeList, string tableName, int fieldID)
24![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
25
/// <summary>
26
/// 通过数据库,根据ID获取单个实体,即直接操作数据库
27
/// </summary>
28
/// <param name="tableName">实体表名</param>
29
/// <param name="fieldID">主键ID</param>
30
/// <returns>实体</returns>
31
public object GetDSByID(string tableName, int fieldID)
32![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
33
/// <summary>
34
/// 获取最大ID
35
/// </summary>
36
/// <param name="tableName">表名</param>
37
/// <returns>最大ID</returns>
38
public int GetMaxID(string tableName)
39![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
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>
49
public int OperateDS(string tableName, SqlType opType, IList model, bool isTrans, string strWhere)
50![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
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>
60
public int OperateDS(string tableName, SqlType opType, object model, bool isTrans, string strWhere)
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
3
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
6
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
7
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
8
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
9
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
11
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
14
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
15
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
16
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
17
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
23
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
24
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
25
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
26
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
28
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
29
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
30
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
31
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
32
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
33
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
34
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
35
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
36
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
37
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
38
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
39
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
40
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
41
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
42
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
43
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
44
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
45
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
46
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
47
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
48
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
49
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
50
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
51
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
52
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
53
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
54
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
55
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
56
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
57
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
58
![](http://bbs.szblogs.com/Images/OutliningIndicators/InBlock.gif)
59
![](http://bbs.szblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
60
![](http://bbs.szblogs.com/Images/OutliningIndicators/None.gif)
具体方法实现,请看相关的页面代码吧,反正代码都在那里了,呵呵。
这里值得说明的是最后1个方法,即OperateDS,我做了一个重载,分别可对实体进行批量(即批量更新、删除等)和单一操作,使用方法在我的DEMO里也有了
基本上实体操作就这些啦,如果大家在使用中遇到什么问题,也欢迎在这里提出来:)
本框架下载地址:
http://bbs.szblogs.com/showtopic-137.html
或者
http://www.cnblogs.com/winsonet/archive/2007/07/31/838253.html