2

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

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

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

显然,对将与该数据库交互的每个模型的每个字符串成员执行此操作是很乏味的。根据SET ANSI_PADDING 上的 MSDN 条目,将其修改为 OFF 也不是一个选项。

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

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

4

2 回答 2

1

看看Dapper.Contrib。如果它是接口类型,该Get方法可以在每个返回的实例上生成更改跟踪代理。

(来自Get方法的评论)

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

您可以查看修改CreateProperty方法以实现您的Trim逻辑

于 2013-08-07T10:33:04.597 回答
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());
        }
    }
}
于 2015-04-24T18:48:19.893 回答