我使用dapper从同一接口访问MySQL和MSSQL。 我面临的问题是我为Nullable定制了SqlMapper.TypeHandler。 TypeHandler映射器用于将Guid映射到数据库中的binary(16)。
问题在于插入和更新。
当guid不为null时,它可以在MySQL和MSSQL中使用。但是,当guid值为null时,它仅适用于MySQL。 问题是我相信插入NULL时的MSSQL需要一种列类型。
我确实在要调用自定义TypeHandler.Parse时更改了Dapper中的一些代码,并且该值为null来要求处理程序将DbType准备为DbParameter,因此我将其设置为始终将类型更改为DbType.Binary。而且有效!但仅用于插入而不用于更新。
因为当参数值为null时,当dapper调用update时,它不会为参数类型调用LookupDbType。而且我不知道Dapper是否有信心做更多更改。
基本上,当使用自定义SqlMapper.TypeHandler时,T是可空的,而在插入或更新数据库时实际上是空的,它在MSSQL中不起作用,并抛出“从数据类型隐式转换”。
有人遇到同样的问题吗?并以某种方式轻松解决了该问题? 谢谢。