7

私はそれが一種の間違ったことであることを知っていますが、空の文字列を意味するときにNULLを含むレガシーコードベースを扱っています。その逆も同様です。

どうすればよいかすぐにはわかりませんが、データベースからマッピングして戻すときに、null文字列ではなく空の文字列を返すようにする(またはdapperを変更する)ことは可能ですか。

4

4 に答える 4

9

Dapper はnullを検出してもセッターを呼び出さないため、オプションには次のものが含まれる場合があります。

  • ""コンストラクターでデフォルト値を設定します
  • nullアクセサーでチェック

そう:

public class SomeDto
{
    public SomeDto()
    {
        Name = "";
    }
    public string Name {get;set;}
}

また:

public class SomeDto
{
    private string name;
    public string Name { get {return name ?? "";} set {name = value;} }
}

ただし、これは読み取り値にのみ適用されます。dto をパラメーター オブジェクトとして渡すときにdapperを有効にする良い方法が思い浮かびません。オプションは次のとおりです。""null

  • anon-type を作成し、代入""nullます (おそらくstring NullIfBlank(this string s)拡張メソッドを記述します)
  • nullの代わりに返される型に shim プロパティが""あり、データベース クエリが@NameOrNullではなくにバインドされている@Name
于 2012-12-19T07:41:45.900 に答える
2

これは、次のようにクエリで制御できます。

    public class Data
    {
        public string Foo { get; set; }
    }

    var result = conn.Query<Data>("select Foo = coalesce(Foo, '') from MyTable");

したがって、上記の例では、Foo が null の場合、coalesce は空の文字列を返します。

于 2012-12-19T05:48:56.810 に答える
1

つまり、データをdapperにロードする方法に応じて、2つの異なるシナリオが発生する可能性があります。

最初に:たとえば、この投稿のように、データプロバイダーレイヤーを上げます-default(T)ではなくDapperクエリからnullを返す方法は?

2番目GetTypeDeserializerの方法:次の投稿で好きなものを変更できます-データベースのnull値をdouble.NaNにマップするようにDapperを変更します

3番目と最後:あなたの以前の質問の受け入れ率に取り組むことは私の友好的なアドバイスです。このようにして、質問に対する回答の可能性を高めることができます。

これがすべて役立つことを願っています。

于 2012-12-19T02:28:25.600 に答える
0

私は文字列に対して ConvertNull() と呼ばれるグローバル拡張メソッドを使用する傾向があり、これは null 値を空の文字列に変換します。その後、コードが乱雑に見えることなく、どこでもこれを呼び出すことができます。これを aspx ページで直接使用している場合は、拡張メソッドの名前空間をインポートしたことを確認してください。そうすれば、メソッドを使用できるようになります。

namespace ExtensionMethods
{
    using System;

    public static class StringExtensionsClass
    {
        /// <summary>Converts null strings to empty strings</summary>
        /// <param name="s">Input string</param>
        /// <returns>Original string, or empty string if original string was null</returns>
        public static string ConvertNull(this string s)
        {
            return s ?? "";
        }
    }
}

次に、文字列のインスタンスでこれを呼び出します。

使用法:

myStringInstance.ConvertNull().Replace("\r\n", "<br />");

于 2014-07-09T08:43:34.797 に答える