让Dapper返回一个空字符串而不是一个空字符串

Lac*_*nia 6 dapper

我知道这样做是错误的,但我正在处理具有NULLS的遗留代码库,当它意味着空字符串时,反之亦然.

我无法立即看到它是如何可能的,但是当从数据库映射回来时,是否有可能获得(或修改小巧的所以它会返回空字符串而不是空字符串).

Mar*_*ell 6

Dapper在看到null时不会调用任何setter ,因此选项可能包括:

  • ""在构造函数中设置默认值
  • null在访问者中检查

所以:

public class SomeDto
{
    public SomeDto()
    {
        Name = "";
    }
    public string Name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

要么:

public class SomeDto
{
    private string name;
    public string Name { get {return name ?? "";} set {name = value;} }
}
Run Code Online (Sandbox Code Playgroud)

但是,这仅适用于阅读值; 我想不出一个很好的方式来获得短小精悍转""null传入的参数对象的DTO的时候; 选项包括:

  • 创建一个anon-type,替换""null(也许写一个string NullIfBlank(this string s)扩展方法)
  • 在返回的类型上使用shim属性null代替"",并将数据库查询绑定到@NameOrNull而不是@Name

  • @Alex不用担心; 我想我知道是谁和为什么 - 我认为有人不喜欢我批评答案.不知何故,我想我会活下来! (2认同)