使用Dapper进行映射时,自动修剪列中的空白区域

时间:2013-08-07 05:29:54

标签: c# ado.net dapper

我正在使用Dapper来访问遗留数据库,并且列上有空格填充。

我找到的解决方案是添加以下属性:

private string _status;
public string status 
{
    get { return _status; }
    set { _status = value.Trim(); }
}

显然,对每个将与此数据库交互的模型的每个字符串成员执行此操作非常繁琐。根据{{​​3}},将此修改为OFF也不是一种选择。

由于数据库不是我的,我无法将其更改为nvarchar或simiar。

是否有一种简单的方法可以强制Dapper修剪它从数据库中读取的每个字符串列?

2 个答案:

答案 0 :(得分:1)

看看Dapper.Contrib。如果{1}}方法是接口类型,则Get方法可以为每个返回的实例生成更改跟踪代理。

(来自Get方法的评论)

  

通过表“Ts”中的单个id返回单个实体。 T必须是接口类型。     ID必须标有[Key]属性。     跟踪/拦截创建的实体以进行更改并由Update()扩展使用。

您可以修改CreateProperty方法来实施Trim逻辑

答案 1 :(得分:1)

一种方法是编写扩展方法并使用反射修剪类上的所有字符串属性。例如:

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());
        }
    }
}