• 国产Linq ORM又一框架诞生了


    一提到Linq ORM框架自然就会想到LinqToSQL,EF,Nhibernate等国外大配框架,其实国内也有两个前辈也很早就实现了,一个是ALinq,一个是DbEntry.NET 这两个实现都非常好,简单易用,今天给大家介绍的是另外一个Linq ORM框架-NLite.Data.

         该框架是2012-8-16 号启动开发的,核心框架和代码我来完成的,小菜来报道 负责各大数据库日期和字符串函数的翻译和测试工作,另外3位主要负责测试工作。该框架的Linq翻译和解析功能最早是自行解析并全部实现了Where表达式相关以及函数基本数据类型等的解析,后来Linq的其它谓词又借鉴了IQToolkit的解析引擎,然后化了2周的时间把两者统一起来形成了NLite.Data Linq 解析的支柱,自从引入IQToolkit后,NLite.Data 的开发就非常快,最主要的工作就是数据库方言的开发和测试。5人2个多月详细的针对各个数据库进行丰富的单元测试,保证了NLite.Data 的稳定性。

       2012-11-16 RC1 发布:

    1. 重构EntityModel 和MemberModel

    2. 优化系统性能

    3. 完善并详细测试SQLServer、Oracle、MySql,SQLite、SqlCE、Access的基本数据类型的相互转换函数

    4. 添加公共接口的代码注释

    5. 简化并增强增删改操作功能

      2012-12-3 RC2 发布

    1. 修复通过HashTable进行删除的Bug

    2. 支持通过connectionString 和providerName 作为参数来配置

    3. 使MySQL 支持无符号类型

    4. 在TableAttribute中添加Schema 属性

    5. 添加基于版本号机制的并发冲突检查机制

    6.移除在DbHelper中对Position参数支持机制,并重构和简化DbHelper,使DbHelper仅仅支持命名参数

    7. 添加Fluent映射Api

    8. 重构表达式ExpresionBuilder,使其可以自定义扩展

    9. 使Oracle 支持自定义序列功能

    NLite.Data Framework是一个轻量简单易用的开源Linq ORM数据访问组件,支持Nullable类型和枚举类型,对Linq的谓词提供了完美的支持,旨在让绝大部份的主流数据库都使用 Linq 来进行程序开发,让开发人员访问数据库从SQL中解放出来,易学易用上手快,配置简单,并且提供了源代码下载,方便定制。支持多数据库,目前支持 Access、SQLServer、SqlCE、SQLite、MySQL、ORACLE,未来还会支持更多的数据库。

              特点:简单、高效、易用、灵活、快捷

            1.  配置简单,支持多数据库         2.  支持Linq         3.  支持集合对象的批量添加、删除、修改         4.  灵活的批量删除(通过Linq表达式)功能         5.  灵活的批量更新(通过Linq表达式)功能         6.  支持一对一映射(不需要配置映射关系自动映射)         7.  支持一对多(不需要配置映射关系自动映射)         8.  支持多对一(不需要配置映射关系自动映射)         9.  遵从数据库的设计理念,不支持多对多,可以把多对多转化成两个一对多        10. 不支持级联更新、级联删除,开发人员完全手工维护外键引用完整性        11. 不支持LazyLoad机制,默认就不会加载,除非指定Include方可        12. 不支持Session缓存机制        13. 不支持二级缓存        14. OR映射不支持任何配置文件        15. OR映射不需可以要任何Attribute配置        16. 字符串配置简单,遵从.net 的配置规范,没有另起灶炉,比如EF,或者NH        17. 只要有有数据库关系理念、懂得Linq表达式就能马上上手

            设计理念

           一: 约定胜于配置   

    •           连接字符串的配置完全遵循.Net 的连接字符串配置规范。
    •          表名映射原则: 默认情况下表名和实体类名完全一致,如果不一致那么可以通过TableAttribute标签来制定,下个版本或许将会增加其它的扩展方式
    •          列名映射原则:默认情况下实体的属性或字段和表中列名完全一致(不区分大小写),如果不一致那么可以通过ColumnAttribute标签来制定,下个版本或许将会增加其它的扩展方式
    •          单一主键映射原则:默认情况下实体的ID属性或”实体名称"+ID的属性自动映射为表的主键,当字段或属性的类型是Int型或Long类型时,那么该字段在数据库中应是自动增一或基于序列的方式
    •         多主键映射原则:如果表中有联合主键那么需要在是实体类中把对应的字段或属性添加IdAttribute标签即可
    •        一对多映射原则:假设有两个实体Customer 和 Order两个实体,Customer 里面包含一个Order的列表属性,那么只需要在Order类里面包含一个CustomerID 的属性或字段即可自动完成一对多映射,当然也可以通过AssociationAttribute标签来指定映射的ThisKey 和ThatKey来手动建立关联(建议自动建立)。
    •       多对一映射原则:假设有两个实体Customer 和 Order两个实体,Order里面包含一个Customer的属性引用,那么只需要在Order类里面包含一个CustomerID 的属性或字段即可自动完成一对多映射,当然也可以通过AssociationAttribute标签来指定映射的ThisKey 和ThatKey来手动建立关联(建议自动建立),其实一对多和多对一的映射完全一致都需要在多方的那里添加一个属性(一方的类名名称+“ID”)。
    •      多对多映射原则:不支持,需要转换成两个一对多映射,和数据库完全保持一致.

          二:基于关系的OR映射的原则

          表和实体是一一对应的,不支持多对多,完全遵循数据库的设计规范,降低开发人员的学习成本(因为数据库不支持多对多,如果OR映射支持多对多那么开发人员 将要学习多对多的映射规则,比如NHibernate,ManyToMany、Set、Bag、Reverse等配置规范以及在多对对数据保存的时候也需 要很多学习成本)

           三:无状态原则

        DbContext中没有保存实体的状态,没有任何数据缓存,所有的数据都是和数据库实时的,只要调用DbSet的Insert、Update、Save方法将立即和数据库进行对应的操作。

    文档

  • 相关阅读:
    Hibernate Validator
    RocketMQ之八:重试队列,死信队列,消息轨迹
    使用hibernate validator出现
    Hibernate Validator--创建自己的约束规则
    Java应用中使用ShutdownHook友好地清理现场、退出JVM的2种方法
    笔者带你剖析轻量级Sharding中间件——Kratos1.x
    [caffe]深度学习之图像分类模型VGG解读
    类的载入机制
    机器人api(图灵机器人)
    回文串问题总结
  • 原文地址:https://www.cnblogs.com/snowhumen/p/2799718.html
Copyright © 2020-2023  润新知