提问人:Vincent 提问时间:10/4/2023 最后编辑:Vincent 更新时间:10/4/2023 访问量:77
Dapper 将 DbNull 转换为空字符串
Dapper convert DbNull to empty string
问:
我正在重构一些使用反射将 SqlCommand 映射到模型的代码。新代码使用 Dapper 框架,工作得很好:
Public Shared Function GetModel(Of T As New)(cmd As SqlCommand) As T
Try
Dim params = GetParametersDictionary(cmd)
Dim result As Object
Using conn As New SqlConnection(ConnectionString)
result = conn.Query(Of T)(cmd.CommandText, params).FirstOrDefault()
End Using
Return result
Catch ex As Exception
ErrorsLogger.LogException(ex)
Throw
End Try
End Function
但是,在旧代码中,我有一个字符串属性和 DbNull 值的边缘情况。像这样:
If IsTypeOfString(prop) AndAlso IsDbNull(value) Then
prop.SetValue(obj, "")
End If
新代码不会将 DbNull (NULL) 值转换为空字符串。相反,它使值没有设置,也就是 Nothing,从而破坏了其他地方的一些代码。
所以我的问题是如何更改此函数以将 NULL 值转换为空字符串?最好没有反射。
尝试/考虑/限制的事情:
- 自定义 Dapper SqlMapper:当值为 NULL 时不起作用。
- 自定义模型映射器:无法为每个模型类型创建自定义模型映射器。
- 在类构造函数中将字符串初始化为 “”:无法保证每个字符串属性都正确初始化为 “”。
- 无法更改查询或模型类(至少目前是这样)。
答:
2赞
Marc Gravell
10/4/2023
#1
Dapper 认为 和 是不同的东西,并积极尝试不将两者混为一谈。也许,您可以对结果进行后处理。null
""
评论
1赞
Vincent
10/4/2023
还行。这将是后期处理......至少现在是这样。我将记录/查找依赖于此空字符串代码的代码,并在那里修复它。
2赞
Marc Gravell
10/5/2023
@Vincent您也可以让它默认为空字符串?public string Whatever {get;set;} = "";
上一个:坐标系转换和实施
评论
select
Coalesce(column, '') as column