代码改变世界

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/// <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)


具体方法实现,请看相关的页面代码吧,反正代码都在那里了,呵呵。

这里值得说明的是最后1个方法,即OperateDS,我做了一个重载,分别可对实体进行批量(即批量更新、删除等)和单一操作,使用方法在我的DEMO里也有了

基本上实体操作就这些啦,如果大家在使用中遇到什么问题,也欢迎在这里提出来:)

本框架下载地址:
http://bbs.szblogs.com/showtopic-137.html
或者
http://www.cnblogs.com/winsonet/archive/2007/07/31/838253.html