常见问题

FQA

Q: 使用过程遇到问题/异常怎么办?
A: 请查看 ex.Message、ex.StackTrace 以及 ex.InnerException.Message、ex.InnerException.StackTrace 查找关键错误信息。当然你也可以在github上提issue或者咨询作者,不过寻求帮助时一定要把问题描述清楚,比如用法、框架版本、数据库、错误异常Message和StackTrace等重要信息,最好能一次性提供(搭配代码、截图更佳),以便对方高效理解和排查问题,节省你我时间。
ps: 经过多年更新和迭代,Chloe.ORM 已经十分稳定,根据以往排错经验,使用 Chloe.ORM 过程遇上问题的十有八九是开发者自己使用的姿势不对所致,因此遇上问题/异常一定要先自己尝试解决,这才是最有效率的途径!

Q: 数据库字段类型与属性类型不一致,导致查询时报错怎么办?
A: 在数据类型映射这块Chloe要求稍微有点严谨,比如数据库是int类型,属性就必须得是int类型,否则映射时有可能会报异常。当然,如果你不想搞得那么严谨,Chloe也开放了扩展接口支持类型转换,参考:https://github.com/shuxinqin/Chloe/blob/master/src/ChloeDemo/Program.cs#L35
只要重写 IMappingType.ReadFromDataReader() 方法,在里面做数据类型转换即可。

Q: 是否支持原生sql查询以及执行原生sql命令?
A: 支持,请查看 DbContext.Session 对象。

Q: 原生sql查询是否支持返回 dynamic?
A: 支持,IDbContext.SqlQuery<dynamic>(sql)。

Q: 是否支持 with nolock/updlock?
A: 支持(v3.3以上),用法参考 DbContext.Query() 方法重载。

Q: 是否支持字符串大小于对比?
A: 支持(v3.3以上),请使用方法 Sql.Compare<T>(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: 查询是否有缓存?
A: 没有。

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哦!!!包装变量方式参考这个 MakeWrapperAccess 方法:https://github.com/shuxinqin/Chloe/blob/master/src/Chloe/Extensions/ExpressionExtension.cs#L102

Q: 查询时如何忽略查询字段?
Q: 如何获取 DataTable?
Q: 传入一个实体,如何更新部分字段?
A: 请移步 http://www.52chloe.com/Wiki/Document/3432725391804989440

Q: 使用过程遇上问题,无法在文档上找到解决方案怎么办?
A: github 是 Chloe.ORM 的主要交流社区,有问题请移步 https://github.com/shuxinqin/Chloe 留言,作者会及时给予回复。

Q: Chloe.ORM 会停更么?
A: 不会,只要你还能访问这个网站,就表明这个框架还活着。

Q: Chloe.ORM 是否收费?
A: 不收费。当然你也可以施舍点零花钱给作者买奶粉,作者绝绝绝对不会拒绝
微信支付