• 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项目里实体为例)

    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
  • 相关阅读:
    ES5特性Object.seal
    自定义右键菜单中bug记录
    ie9及以下不兼容event.target.dataset对象
    创建一个新数组并指定数组的长度
    vue组件的配置属性
    前端模板引擎和网络协议分类
    Python查询Mysql时返回字典结构的代码
    Python实现计算圆周率π的值到任意位的方法示例
    Python实现计算圆周率π的值到任意位的方法示例
    Python实现的计算马氏距离算法示例
  • 原文地址:https://www.cnblogs.com/winsonet/p/845331.html
Copyright © 2020-2023  润新知