Winson.Framework的实体操作解说

本文介绍了Winson.Framework中实体操作的功能与使用方法,包括利用泛型和自定义实体集合进行高效的数据操作,以及如何通过索引器简化实体类属性赋值过程。
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项目里实体为例)

None.gif protected Employees empDS;
None.gif
protected WType wtypeDS;


这里需要注意的是,实体只是声明,但不要同时进行实例化,这是因为本框架使用了泛型类,过早实例化会取不到实体对象(好像是这个原因吧,呵呵),必须将实例化方法放在Page_Load或者其他函数体内,如以下是实例化的代码:

None.gif protected void Page_Load( object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif   
... {
InBlock.gif        empDS
= new Employees();
InBlock.gif        EmpDSOper
= new ModelOperate<Employees>(empDS);
ExpandedBlockEnd.gif    }


这里要为泛型类传递一个实体对象做为参数

2)现在可以直接使用EmpDSOper对象来操作实体类了,以下是实体操作方法说明:

1 ExpandedBlockStart.gif ContractedBlock.gif /**/ /// <summary>
2InBlock.gif/// 获取数据列表
3InBlock.gif/// </summary>
4InBlock.gif/// <param name="tableName">表名</param>
5ExpandedBlockEnd.gif/// <returns>数据列表</returns>

6 None.gif public IList GetList( string tableName)
7 None.gif
8 ExpandedBlockStart.gifContractedBlock.gif /**/ /// <summary>
9InBlock.gif/// 获取数据列表
10InBlock.gif/// </summary>
11InBlock.gif/// <param name="tableName">表名</param>
12InBlock.gif/// <param name="strWher">条件语句</param>
13ExpandedBlockEnd.gif/// <returns>数据列表</returns>

14 None.gif public IList GetList( string tableName, string strWher)
15 None.gif
16 ExpandedBlockStart.gifContractedBlock.gif /**/ /// <summary>
17InBlock.gif/// 在实体集合里,根据ID获取单个实体
18InBlock.gif/// </summary>
19InBlock.gif/// <param name="modeList">实体集合</param>
20InBlock.gif/// <param name="tableName">实体表名</param>
21InBlock.gif/// <param name="fieldID">主键ID</param>
22ExpandedBlockEnd.gif/// <returns>实体</returns>

23 None.gif public object GetDSByID(IList modeList, string tableName, int fieldID)
24 None.gif
25 ExpandedBlockStart.gifContractedBlock.gif /**/ /// <summary>
26InBlock.gif/// 通过数据库,根据ID获取单个实体,即直接操作数据库
27InBlock.gif/// </summary>
28InBlock.gif/// <param name="tableName">实体表名</param>
29InBlock.gif/// <param name="fieldID">主键ID</param>
30ExpandedBlockEnd.gif/// <returns>实体</returns>

31 None.gif public object GetDSByID( string tableName, int fieldID)
32 None.gif
33 ExpandedBlockStart.gifContractedBlock.gif /**/ /// <summary>
34InBlock.gif/// 获取最大ID
35InBlock.gif/// </summary>
36InBlock.gif/// <param name="tableName">表名</param>
37ExpandedBlockEnd.gif/// <returns>最大ID</returns>

38 None.gif public int GetMaxID( string tableName)
39 None.gif
40 ExpandedBlockStart.gifContractedBlock.gif /**/ /// <summary>
41InBlock.gif/// 数据操作,批量操作
42InBlock.gif/// </summary>
43InBlock.gif/// <param name="tableName">表名</param>
44InBlock.gif/// <param name="opType">操作类型 "insert,update,delete"</param>
45InBlock.gif/// <param name="model">实体集合</param>
46InBlock.gif/// <param name="isTrans">是否需要事务 true 要;false 否</param>
47InBlock.gif/// <param name="strWhere">更新或者删除条件(不需要 where,更新或删除时留空,则默认以当前记录ID为条件进行处理,如需操作所有数据,直接写 '1=1' 即可)</param>
48ExpandedBlockEnd.gif/// <returns>成功返回1 失败返回0</returns>

49 None.gif public int OperateDS( string tableName, SqlType opType, IList model, bool isTrans, string strWhere)
50 None.gif
51 ExpandedBlockStart.gifContractedBlock.gif /**/ /// <summary>
52InBlock.gif/// 数据操作,单实体操作
53InBlock.gif/// </summary>
54InBlock.gif/// <param name="tableName">表名</param>
55InBlock.gif/// <param name="opType">操作类型 "insert,update,delete"</param>
56InBlock.gif/// <param name="model">实体</param>
57InBlock.gif/// <param name="isTrans">是否需要事务 true 要;false 否</param>
58InBlock.gif/// <param name="strWhere">更新或者删除条件(不需要 where,更新或删除时留空,则默认以当前记录ID为条件进行处理,如需操作所有数据,直接写 '1=1' 即可)</param>
59ExpandedBlockEnd.gif/// <returns>insert返回最大的ID,update/delete成功返回1 失败返回0</returns>

60 None.gif public 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

转载于:https://www.cnblogs.com/winsonet/archive/2007/08/06/845331.html

Winson.Framework 1.0简介:<br><br> Winson.Framework 1.0可以说是一个基于ASP.NET2.0技术小型应用框架,是本人从以<br><br>往的开发经验和网上的一些好的代码收集整合而成的。<br><br> 这里需要说明一下的就是,本框架的数据库底层代码是改自于台湾一位朋友的数据库<br><br>底层代码,我是在其基础上添加了一些功能,如可同时可支持MSSQL和ACCESS数据库,可显<br><br>示自定义异常等。当然,如果需也,也可以继续扩展支持其他的数据库,呵呵。<br><br>========================================<br><br>功能介绍:<br><br>一、数据库类:<br><br>1、本框架是基于ASP.NET2.0技术,同时可支持MSSQL和ACCESS数据库,只需在配置文件里修改<br> 一下即可马上使用不同的数据库,不需改其他任何代码。<br>2、可设置是否对连接字符串进行加密,并可设置加解密KEY。<br>3、可直接使用XML文件为实体<br>4、可设置是否需要缓存,同时可设置缓存文件依赖存放的位置<br>5、可支持多语言的数据库自定义错误信息,现在支持简体和繁体2种<br>6、可设置是否启用错误日志记录<br>7、可设置自动保存应用程序参数的时间间隔<br>8、可设置是否显示系统异常信息,否则显示自定义异常信息<br>9、通用的数据库底层操作,同时支持存储过程调用<br>10、方便地操作读取自定义配置文件的信息<br><br>二、功能控件类:<br><br>1、漂亮的自定义警告框,可为警告框设置相应的事件<br>2、漂亮的自定义提示框,即类似MSN消息框的效果,可设置多种效果,也可以使用事件钩子调用<br>3、强大的自定义分页控件,支持多种数据绑定控件,支持自定义分页按钮样式,支持AJAX无刷新<br> 分页,可灵活设置各种参数效果<br>4、方便的Tab控件(取自Discuz!NT),即DNT论坛后台的那种选项卡的效果<br>5、类帮助器,可以动态对类,类成员进行控制(添加,删除),目前只支持属性控制。<br>6、可动态创建ul或者dl构成的列表<br>7、通用的MessageBox类,可根据需要显示各种提示框<br>8、支持URL重写,可自定义重写规则,同时还可以限制IP访问,需修改XML配置文件<br>9、Xml文件操作类库,基本上已可满足常用的XML操作需要<br><br>三、经常需要使用的一些验证逻辑与方法类:<br><br>1、返回上一个页面的地址<br>2、获取当前请求的原始 URL(URL 中域信息之后的部分,包括查询字符串(如果存在))<br>3、获得当前完整Url地址<br>4、过滤危险字符串<br>5、替换html中的特殊字符<br>6、恢复html中的特殊字符<br>7、检查一个字符串是否可以转化为日期,一般用于验证用户输入日期的合法性<br>8、检查一个字符串是否是纯数字构成的,一般用于查询字符串参数的有效性验证。<br>9、检查一个字符串是否是纯字母和数字构成的,一般用于查询字符串参数的有效性验证。<br>10、判断是否是数字,包括小数和整数。<br>11、快速验证一个字符串是否符合指定的正则表达式。<br>12、上传文件,不限制大小和类型并上传到默认UploadFile目录<br>13、上传文件,不限制大小和类型并上传到自定义路径<br>14、上传文件,可设置大小、类型和存放路径<br>15、生成缩略图<br>16、在图片上增加文字水印<br>17、在图片上生成图片水印<br><br>四、实体操作类:<br><br>1、利用泛型和集合,结合数据库实体进行操作以提高效率和封装性<br>2、动态生成所需的SQL增、删、改、查等语句对实体进行操作<br>3、上层操作可以不需要写SQL语句<br>4、实体赋值方便,只需设置需要更新的某个字段即可,不需全部字段去赋值,同时读取实体<br> 时系统也会自动为每个字段赋值,不需再手工编写赋值代码<br>5、由于本框架的实体类和实体操作类需特别处理,因此已提供了实体类和实体操作类的代码<br> 生成模板文件,使用Codesmith生成!<br>6、另此DEMO附一个无限级分类的管理操作及相关的数据库<br><br>五、其他说明:<br><br>本程序目录里已有多个试例DEMO,基本上主要功能均有演示了,另有一个非常通用方便的JS<br><br>校验文件,在js/check.js目录,至于使用方法,请自己看看里面的注释吧,呵呵<br><br>欢迎大家一起来完善这个框架,有什么好的东西记得告诉我哦:)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值