Simple.Data 介绍、检索数据(1)

接触 ORM 至今为止,从最初的 NHibernate、Castle、EF 相对强大的类库,到现在使用的“很黄很暴力”的 Simple.Data,已经有10年的时间。
而 ORM 之前基本都是写一句 SQL 语句查询返回 DataSet(.NET),后来在此基础上增加数据访问层 Dao 来封装,再进一步返回业务对象。
现在感触最深的还是回归到可控性最强的 SQL 但无法避免返回 DataSet 问题(虽然可以用 Reader解决),而 Simple.Data 可以牺牲一定可控性的基础上换取便利的对象操作。

安装

  1. 要求 .NET 4.0 或以上
  2. 使用 nuget 搜索 simple.data.core(核心库)
  3. 根据数据库引擎需要,在主项目使用 nuget 搜索 simple.data.sqldata(mysql/oracle),安装过程同时自动安装 simple.data.adoadapter

检索数据 - retrieve data

标准类型 SimpleExpression(SE),返回 SimpleQuery(SQ) 可以通过迭代 SimpleRecord(SR) 集合获取结果数据对象,此对象为 dynamic 类型,可使用强类型转换为期望类型或 IDictionary

dynamic 类型优点在于允许直接访问属性(列名) result.ColumnName,也可以通过索引访问 result[“ColumnName”](记得可以的,若不行则需要强类型转换 IDictionar

若数据存在外键,还允许在 SE 通过外键表名称直接写条件,如 table.Topic.Title.Like(“%我的心得%”),避免繁琐的 Join On。

当然,据目前使用过程还发现一些 Bug

  • 存在两个或以上的外键指向同一张表,SE 只建立最后一个外键(字段顺序也可能是外键顺序,但不确认),建议出现此类情况还是使用 JOIN ON 来解决
  • ToFirstOrDefault 导致从表仅返回第一条数据,建议使用 Find 或延迟加载从表数据
  • Skip 且没有 Where 引起分页条件位置不正确,导致数据分页查询返回结果不正确,建议增加默认条件
  • WithTotalCount 返回属性含有集合对象Bug,原因未明,建议尽量不要返回集合数据对象,改用 Select 优化,如无法避免则建议使用 dynamic 延迟加载集合对象。

Simple.Data 主要常用类型有

名称 缩写 说明
DynamicStrategy DS 数据库
DynamicTable DT 数据表
SimpleQuery SQ 查询
SimpleExpression SE 条件表达式
SimpleRecord SR 记录
SimpleList SL 记录列表
ObjectReference OR 对象引用,DS.DT、DT.Field 都可转换为此对象
命令 参数 返回 说明
All SE SQ 返回表所有数据
FindAll SE SQ 通过标准返回表数据
FindAllBy OR[] SQ 通过列名和值返回表数据
Find SE SR 通过标准返回一条表数据,若查询到多条只返回第一条
Get o[] SR 通过主键返回一条表数据
GetCount SE int 通过标准返回表数据数量
GetCountBy str int 通过列名和值返回表数据数量
Exists/Any SE bool 通过标准返回是否存在表数据
ExistsBy/AnyBy str bool 通过列名和值返回是否存在表数据数量

其他注意问题

  • Query、QueryBy:已过时,请使用 All、FindAllBy
  • FindBy:已过时,请使用 FindAllBy.FirstOrDefault() 或 Get
  • SimpleQuery:可以使用迭代或 ToList、ToFirstOrDefault、ToScalar 等 Linq 相似的方法或数据对象