#1649·Dapper

不要求从列表扩展中提取参数的 Handlers 类型

作者: benbryant0创建于 2021年4月10日更新于 2026年9月16日

我注意到,有`TypeHandler'注册的类型将不会执行该处理器,如果该类型是Dapper扩展的集合的一部分。 这里有一个测试来复制这个:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 私人只读结构身份Type { 私人只读输入 值;

公共身份Type( 净值) { 值=数值; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

public into( 身份Type other) value.compareTo( other. value);

getHashCode () 值;

公共覆盖字符串toString () value.toString ();

公用静态显式运算符 int(身份Type d) => d. 值; 公共静态显式操作员身份Type(int d) => new(d); {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

私人类 身份 TypeHandler : SqlMapper. TypeHandler < 身份 类型 > { 公共覆盖身份Type Parse(对象值) QQ新(( int) 值); 公共覆盖无效 SetValue( IDbDataParameter 参数, 身份类型值) { 参数.DbType = DbType.Int32; (中文(简体) ). 参数。 值=(int)值; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

[事实] 公共空虚的土豆 () { SqlMapper. Add TypeHandler( 新身份TypeHandler () ) ;

var 身份 List = 可假设. 范围(1,5) .Select(i QQ 新的身份类型( 一)) .toList (); (原始内容存档于2018-09-21).

varparam = 新{第一个项目=身份列表[0],所有项目=身份列表}; var 结果=连接. 查询(“SELECT * from (VALUES(1)) AS t(Id) 哪里@ 第一个项目在@所有项目中;), 第1段) . SingleOrDefault( ); (中文).

Ass.Equal(1,结果); {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?


我对这里的代码不熟悉,但经过一点调查,我走到了[这行](https://GitHub.com/StackExchange/Dapper/blob/6ec3804f2c44f2bf6b757dc3522bf009cc64b27d/Dapper/SqlMapper.cs#L2026),该类型处理器将在那里取取而不用. 我设法使我的测试通过,通过坚持操作器,如果它被设定的话使用;但是由于其他基于特定类型的分支("isString"和"isDbString"),我不确定正确的行为应该是什么. 否则这将是PR:D.

原谅我,如果这是有意的和/或有 另一种方法做到这一点。 我四处找了找 找不到任何关于此事的信息.

内容来源: DapperLib/Dapper