zoukankan      html  css  js  c++  java
  • DataRabbit 轻量的数据访问框架(03) -- IOrmAccesser(续)

       本文将接着 DataRabbit 轻量的数据访问框架 -- IOrmAccesser 继续介绍IOrmAccesser的一些高级功能。这些高级功能需要DataRabbit.ORM.ISmartEntity接口的支持。注意,对于Entity class 来说,该接口并不是强制的。

    (1)关于含自增字段的Entity插入

         插入后,Entity中对应自增字段的属性将被正确地赋为数据库中自增结果值。


       如果Entity class 继承了ISmartEntity接口,那么这个Entity就是一个“Smart”的Entity,IOrmAccesser针对这样的Entity,它将拥有两种特殊的能力:
    (2)partial update:即部分更新的功能。即在Update一个SmartEntity对象时,只更新哪些标记为“dirty”的字段。
       比如,我们以前这样来实现“将ID为30的学生的Email更新”的功能:

                //将ID为30的学生的Email更新
                Student student = stuOrmAccesser.GetOne(new Filter(Student._ID, 30));        
                student.Email 
    = "sky@299.com";
                stuOrmAccesser.Update(student);//更新除主键外的所有字段

       但是,如果Student Entity实现了ISmartEntity接口,就可以这么做:
                //将ID为30的学生的Email更新
                Student student = new Student() ;
                student.ID = 30 ;
                student.Email 
    = "sky@299.com";
                stuOrmAccesser.Update(student);//仅仅更新“Email”字段

       由于指讲“Email”字段标记为“dirty”,所以在Update时,仅仅会更新“Email”字段的值。

    (3)插入前检查:即在向数据库中插入一个SmartEntity对象之前,先检查该对象的状态是否正确,如果不正确,将不会插入,而是抛出InvalidEntityException异常。

       ISmartEntity接口定义与说明如下:
        public interface ISmartEntity
        {
            
    /// <summary>
            
    /// Clean 将所有Column字段的dirty标记设为false。
            
    /// </summary>
            void Clean();

            
    /// <summary>
            
    /// DirtyColumnList 获取所有需要更新的Column
            
    /// </summary>
            IList<string> DirtyColumnList { get; }

            
    /// <summary>
            
    /// Check 用于检查Entity内部状态是否一致。
            
    /// 在将ISmartEntity插入(或更新)到数据库之前,DataRabbit会检查(Check)其状态是否有效,如果无效,则将抛出InvalidEntityException。
            
    /// </summary>      
            bool Check(DataAccessType dataAccessType);
        }

        
    /// <summary>
        
    /// DataAccessType 访问数据库的几种操作类型
        
    /// </summary>
        public enum DataAccessType
        {
            Query, Insert, Update, Delete
        }
       
       普通的Entity class可以通过工具自动生成,smart Entity class也可以通过工具自动生成,我写了一个简单的小工具“EntityCreator”来生成Entity class或smart Entity class。生成的Entity class代码中,Check()方法直接返回true,我们可以在这个方法内添加代码以检查当前Entity对象的状态,确保在插入该对象之前,对象的状态是一致、正确的。
       下面是针对前述的Student生成的smart Entity 代码:
    Student


       最后,提供EntityCreator小工具的下载。


    返回到:轻量的数据访问框架 --序  


  • 相关阅读:
    MTV和MVC的区别
    django权限之二级菜单
    Python PEP8代码书写规范
    form表单
    forms组件
    Django的用户认证组件
    Django的分页
    cookie session
    文件上传
    ORM多表操作上
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/680889.html
Copyright © 2011-2022 走看看