私はそれが一種の間違ったことであることを知っていますが、空の文字列を意味するときにNULLを含むレガシーコードベースを扱っています。その逆も同様です。
どうすればよいかすぐにはわかりませんが、データベースからマッピングして戻すときに、null文字列ではなく空の文字列を返すようにする(またはdapperを変更する)ことは可能ですか。
私はそれが一種の間違ったことであることを知っていますが、空の文字列を意味するときにNULLを含むレガシーコードベースを扱っています。その逆も同様です。
どうすればよいかすぐにはわかりませんが、データベースからマッピングして戻すときに、null文字列ではなく空の文字列を返すようにする(またはdapperを変更する)ことは可能ですか。
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
""
しnull
ます (おそらくstring NullIfBlank(this string s)
拡張メソッドを記述します)null
の代わりに返される型に shim プロパティが""
あり、データベース クエリが@NameOrNull
ではなくにバインドされている@Name
これは、次のようにクエリで制御できます。
public class Data
{
public string Foo { get; set; }
}
var result = conn.Query<Data>("select Foo = coalesce(Foo, '') from MyTable");
したがって、上記の例では、Foo が null の場合、coalesce は空の文字列を返します。
つまり、データをdapperにロードする方法に応じて、2つの異なるシナリオが発生する可能性があります。
最初に:たとえば、この投稿のように、データプロバイダーレイヤーを上げます-default(T)ではなくDapperクエリからnullを返す方法は?。
2番目GetTypeDeserializer
の方法:次の投稿で好きなものを変更できます-データベースのnull値をdouble.NaNにマップするようにDapperを変更します
3番目と最後:あなたの以前の質問の受け入れ率に取り組むことは私の友好的なアドバイスです。このようにして、質問に対する回答の可能性を高めることができます。
これがすべて役立つことを願っています。
私は文字列に対して 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 />");