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

标签 dapper

我知道这是一种错误的做法,但我正在处理具有 NULLS 的遗留代码库,当它表示空字符串时,反之亦然。

我无法立即看到它是如何可能的,但是当从数据库映射回来时,是否有可能获取(或修改 dapper 以便它会)返回一个空字符串而不是空字符串。

最佳答案

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

  • 将默认值设置为 ""在构造函数中
  • 检查 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;} }
    }
    

    但是,这只适用于读取值;我想不出一个让小巧玲珑转身的好方法""进入 null将 dto 作为参数对象传入时;选项包括:
  • 创建一个匿名类型,替换为 ""null (也许写一个string NullIfBlank(this string s) 扩展方法)
  • 在返回 null 的类型上具有 shim 属性代替"" ,并将您的数据库查询绑定(bind)到 @NameOrNull而不是 @Name
  • 关于dapper - 让 Dapper 返回一个空字符串而不是一个空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13944651/

    相关文章:

    c# - Dapper 存储过程和 View

    c# - 将 Dapper 查询反序列化为模型

    c# - Dapper 传递动态参数

    dapper - 使用 Dapper for .NET Core 返回输出参数

    c# - 高级级联删除

    c# - 如何使用 MySQL Connector for .NET 或 Dapper 从 SHOW PROCESSLIST 获取行?

    c# - Dapper .net 多次查询 'The reader has been disposed' 错误

    c# - 将 DateTime 更新到数据库会引发 SqlTypeException - SqlDateTime 溢出

    .net - 从 Dapper ORM 调用 Oracle 存储过程时,无法将类型 'System.Int32[]' 的对象转换为类型“System.IConvertible”

    c# - 如何在 Sqlite 中使用 Dapper.QueryMultiple