使用Dapper进行映射时,自动从列中修剪空白
本文关键字:空白 修剪 Dapper 映射 使用 | 更新日期: 2023-09-27 18:26:38
我正在使用Dapper访问一个遗留数据库,列上有空白填充。
我发现的解决方案是添加属性,如:
private string _status;
public string status
{
get { return _status; }
set { _status = value.Trim(); }
}
显然,对于将与该数据库交互的每个模型的每个字符串成员来说,这样做是乏味的。根据SET ANSI_PADDING上的MSDN条目,将其修改为OFF也不是一个选项。
由于数据库不是我的,我无法将其更改为nvarchar或simiar。
有没有一种简单的方法可以强制Dapper修剪它从数据库中读取的每个字符串列?
看看Dapper.Contrib
。如果是接口类型,Get
方法可以在每个返回的实例上生成一个更改跟踪代理。
(来自Get
方法的注释)
通过表"Ts"中的单个id返回单个实体。T必须是接口类型。Id必须标记有[Key]属性。创建的实体会被跟踪/截获以进行更改,并由Update()扩展使用。
您可以修改CreateProperty
方法来实现Trim
逻辑
public static class ObjExt
{
public static void Trim<T>(this T item)
{
var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var p in properties)
{
if (p.PropertyType != typeof(string) || !p.CanWrite || !p.CanRead) { continue; }
var value = p.GetValue(item) as string;
p.SetValue(item,value.Trim());
}
}
}