C# 使用Dapper映射时自动修剪列中的空白

C# 使用Dapper映射时自动修剪列中的空白,c#,ado.net,dapper,C#,Ado.net,Dapper,我使用Dapper访问一个遗留数据库,列上有空格填充 我找到的解决方案是添加如下属性: private string _status; public string status { get { return _status; } set { _status = value.Trim(); } } 显然,对将与此数据库交互的每个模型的每个字符串成员执行此操作是非常繁琐的。根据,将其修改为“关闭”也不是一个选项 由于数据库不是我的,我无法将其更改为nvarchar或simiar

我使用Dapper访问一个遗留数据库,列上有空格填充

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

private string _status;
public string status 
{
    get { return _status; }
    set { _status = value.Trim(); }
}
显然,对将与此数据库交互的每个模型的每个字符串成员执行此操作是非常繁琐的。根据,将其修改为“关闭”也不是一个选项

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

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

看看。
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());
        }
    }
}
公共静态类ObjExt
{
公共静态空隙装饰(此T项)
{
var properties=typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach(属性中的var p)
{
如果(p.PropertyType!=typeof(string)| |!p.CanWrite | |!p.CanRead){continue;}
var value=p.GetValue(项)作为字符串;
p、 SetValue(item,value.Trim());
}
}
}

简短回答:否;我们在这里讨论的是多少列?多达12列,超过相当多的模型,因此有大量的冗余代码在浮动。我目前正在使用
con.Query(..
,有时我需要它作为一个列表,所以我不确定Get如何处理我返回的单个项目。我如何实现CreateProperty修改?现在是老帖子,但Dapper.Contrib对您没有帮助不。