Skip to content
shuxin edited this page Jul 5, 2024 · 22 revisions

FQA

Q: 使用过程遇到问题/异常怎么办?

A: 请查看 ex.Message、ex.StackTrace 以及 ex.InnerException.Message、ex.InnerException.StackTrace 查找关键错误信息,以及仔细查看使用文档。当然你也可以在 github 上提 issue 或者咨询作者,不过寻求帮助时一定要把问题描述清楚,比如用法、框架版本、数据库、错误异常 Message 和 StackTrace 等重要信息,最好能一次性提供(搭配代码、截图更佳),以便对方高效理解和排查问题,节省你我时间。

泰拳警告: 经过多年更新和迭代,Chloe.ORM 在稳定和可靠性方面遥遥领先同类框架。根据以往排错经验,使用 Chloe.ORM 过程遇上问题的十有八九是开发者自己使用的姿势不对所致,因此遇上问题/异常一定要先自己尝试解决,仔细查看使用文档和参考 github 上的 demo(基本覆盖了所有用法),这才是最有效率的途径!

Q: 查询如 q.Where(a => a.Name == "Chloe") 为什么生成的不是参数化 sql ?

A: 因为框架内部解析 lambda 时对于常量(ConstantExpression)不做参数化处理(刻意的,不要问为什么,问我也不告诉你),如需参数化,请使用变量,如:

var name = "Chloe";
q = q.Where(a => a.Name == name);
...

Tip: 自行拼接 lambda 表达式树的注意了, 千万不要用 ConstantExpression 包装你的变量,否则会生成非参数化 sql,存在 sql 注入风险!!! 包装变量方式参考这个 MakeWrapperAccess 方法:https://github.com/shuxinqin/Chloe/blob/master/src/Chloe/Extensions/ExpressionExtension.cs#L130

Q: int/long 类型非自增主键,为什么插入失败?

A: 框架针对主键有一些默认规则:

  1. 如果一个实体没显示指定主键,Chloe 默认选择名为 Id 的属性(如果存在)作为主键。
  2. 如果实体没有显式指定任何自增列并且主键为 Int16、Int32 或者 Int64 类型,则会默认主键为自增列。如若不是自增列,需使用特性 NonAutoIncrementAttribute 标记。

Q: 关于 string 类型属性

A: 对于区分 varchar 和 nvarchar 类型的数据库(SqlServer、Oracle等),如果数据字段是 varchar 类型,建议把属性的 DbType 设置为 DbType.AnsiString,否则某些情况下查询会出现类型转换,导致索引失效。

Q: Oracle 怎么支持 Clob/NClob?怎么向 PostgreSQL 插入 json 类型?

A: 通过配置 MappingType 处理参数类型,参考 https://github.com/shuxinqin/Chloe/blob/master/src/ChloeDemo/String_MappingType.cs

Q: 是否支持原生 sql 查询以及执行原生 sql 命令?

A: 支持,请查看 DbContext.Session 对象。

Q: 原生 sql 查询是否支持返回 dynamic?

A: 支持,IDbContext.SqlQuery(sql)。

Q: 是否支持 with nolock/updlock?

A: 支持(v3.3以上),用法参考 DbContext.Query() 方法重载。ps:v4.0以上支持乐观并发控制,参考Chloe.Annotations.ColumnAttribute.IsRowVersion

Q: 是否支持字符串大小于对比?

A: 支持(v3.3以上),请使用方法 Sql.Compare(T value1, CompareType compareType, T value2)。

Q: 是否支持 in、distinct、exists 查询?

A: 支持,具体用法看文档。

Q: 是否支持 case when 语法?

A: 支持(v3.3以上),用法如下:

q.Select(a => Case.When(a.Gender == Gender.Man).Then("Man").When(a.Gender == Gender.Woman).Then("Woman").Else(null));

Q: 是否支持多主键?

A: 支持。

Q: 查询是否有缓存?

A: 没有。

Q: 如何获取 DataTable?

Q: 传入一个实体,如何更新部分字段?

A: 请移步 https://github.com/shuxinqin/Chloe/wiki/Chloe.Extension

Q: 使用过程遇上问题,无法在文档上找到解决方案怎么办?

A: github 是 Chloe.ORM 的主要交流社区,有问题请移步 https://github.com/shuxinqin/Chloe/issues 留言,作者会及时给予回复。

Q: Chloe.ORM 会停更么?

A: 停更的话我会告诉你的。

Q: Chloe.ORM 是否收费?

A: 不收费。当然你也可以施舍点零花钱给作者植发,作者绝绝绝对不会拒绝

微信支付