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

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 に答える