ELinq 是一个轻量简单易用的开源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映射也支持xml配置文件 15. OR映射可以不需要任何Attribute配置 16. OR映射的方式:a. Fluent API 方式,b. Attribute 方式,c. 约定方式,d. 混合方式(可以混合a、b、c 三种方式,映射的优先级a>b>c),e. Xml方式 17. 字符串配置简单,遵从.net 的配置规范,没有另起灶炉,比如EF,或者NH 18. 只要有有数据库关系理念、懂得Linq表达式就能马上上手 19. ELinq 主要对字符串类型做了参数化,数值类型没有做参数化处理,由于有些数据库函数不支持数值类型的参数化参数。
设计理念* *
一: 约定胜于配置
连接字符串的配置完全遵循.Net 的连接字符串配置规范。
表名映射原则: 默认情况下表名和实体类名完全一致,如果不一致但是大部分都遵循一定的规律,比如表名都是复数,类名都是单数等,那么可以通过通过SetClassNameToTalbeName策略方法来进行,针对个别不一致情况可以通过TableAttribute标签来制定,或者通过自定义ClassMap来进行,也可以通过XML方式进行统一配置
列名映射原则:默认情况下实体的属性或字段和表中列名完全一致(不区分大小写),如果不一致那么可以通过ColumnAttribute标签来制定,也可以通过自定义ClassMap来进行,也可以通过XML方式进行统一配置
单一主键映射原则:默认情况下实体的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方法将立即和数据库进行对应的操作。