ELinq

ORM数据访问组件
授权协议 Apache
开发语言 .NET
所属分类 程序开发、 ORM/持久层框架
软件类型 开源软件
地区 国产
投 递 者 姚韬
操作系统 Windows
开源组织
适用人群 未知
 软件概览

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方法将立即和数据库进行对应的操作。

 相关资料
  • 如何从父组件中访问子组件数据?我有一个父组件“MissionPlanner ”,我想访问名为“ChosenHeroes”的子组件“chosenHeroes”数组。如果数组中有元素,我想最终呈现一个div并能够更新父数组中的数组 我不确定我是否应该使用emit()以及如何确切地使用它。我尝试制作一个自定义事件“addHero”并将其传回。但是我遇到了错误 ChosenHeroes.vue HeroP

  • 项目描述: 数据访问组件,提供了一组类库和一个代码生成工具,使.net项目中数据访问更简化. 功能: 多种数据库支持. 提供DataSet, DataTable 和数据实体查询. 执行SQL脚本及存储过程. 条件表达式. 常用SQL方法, 如MAX, MIN等可能被应用在查询中. 数据实体代码及XML文件生成. 使用: 基本功能:1. 使用 "EntitiesGenerator" 生成工具生成实体

  • 我想访问来自该对象数组的ends\u数据。。。但我不能让它工作。输出未定义。请帮帮我。

  • 我正在将道具传递给组件: 在上面的代码中,我已经注释了给出错误的行。如果我删除该行,它会正常工作并且模板渲染正确(我也可以看到{{MessageId}}的预期值)。因此传递数据的逻辑是正确的。 似乎在 data() 中访问 的方式是错误的。那么如何访问数据中的道具呢?

  • 我在用vue-cli支架做网页包 我的Vue组件结构/传家宝目前看起来如下: 应用程序 在应用程序级别,我需要一个vuejs组件方法,该方法可以将子组件的所有数据聚合到一个JSON对象中,然后发送到服务器。 有没有办法访问子组件的数据?具体来说,多层深? 如果没有,传递oberservable数据/参数的最佳实践是什么,这样当子组件修改它时,我就可以访问新的值?我试图避免组件之间的硬依赖关系,所以

  • 我目前有一个类似以下的数据库结构。如果无法在Firebase实时数据库安全规则中循环,我如何基于用户对多个组的访问来保护数据?要遵循的例子... 数据库结构: 我如何在上指定安全规则,以基于中指定的任何组与当前用户的

  • 问题内容: 如果通过网络服务获得以下数据: 我如何访问第二个col1? 如下: 给我: 问题答案: 它是一个包含2个元素的数组,其中包含和,所以类似: (是第一个元素,然后选择“ col1”)

  • ActiveX Data Objects (ADO) 是一项容易使用并且可扩展的将数据库访问添加到 Web 页的技术。可以使用 ADO 去编写紧凑简明的脚本以便连接到 Open Database Connectivity (ODBC) 兼容的数据库和 OLE DB 兼容的数据源。如果您是一个对数据库连接有一定了解的脚本编写人员,那么您将发现 ADO 命令语句并不复杂而且容易掌握。同样地,如果您是一