为什么从Dapper返回的对象具有null和default属性值?

Rae*_*ark 5 .net c# dapper

我在存储库中使用Dapper将查询结果映射到我要返回的API的DTO类型列表.一切似乎都正常工作但在查询和映射完成后,列表中填充了正确数量的对象,但所有int属性都为0,字符串为null.我在其他项目中使用了Dapper,并且从未遇到过这种情况.我还验证了数据是正确的,如果我将查询复制到SQL Management Studio,它会给我正确的数据.

这是包含自定义映射逻辑的存储库基类的构造函数.我确认这个代码很受欢迎.

static BaseRepository()
{
    SqlMapper.SetTypeMap(typeof(T),
      new CustomPropertyTypeMap(
          typeof(T), (type, columnName) => type.GetProperties()
              .FirstOrDefault(prop => prop.GetCustomAttributes(false)
                      .OfType<ColumnAttribute>()
                      .Any(attr => attr.Name == columnName))));
}
Run Code Online (Sandbox Code Playgroud)

以下是填充列表的存储库方法:

public IEnumerable<Dog> GetAll()
{
    var dogs = Db.Query<Dog>(@"SELECT Id, Name FROM Dogs");
    return dogs;
}
Run Code Online (Sandbox Code Playgroud)

这是我的目标:

[DataContract]
public class Dog
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

所以我已经确认"狗"变量被填充,但所有Id和Name元素都是0或null.以下是最终的JSON结果:

[
    {
        Id: 0,
        Name: null
    },
    {
        Id: 0,
        Name: null
    },
    {
        Id: 0,
        Name: null
    }

]
Run Code Online (Sandbox Code Playgroud)

我也尝试将列属性添加到属性中,例如[Column(Name = "Id")].仍然没有运气.我在俯瞰什么?

编辑: 我能够使用此相关答案中的示例代码和要点来解决此问题.

Mar*_*ell 2

您似乎有一个自定义地图,它使用[Column("Id")]etc 来定义/识别列。但是,您尚未添加此属性 - 因此不会找到任何列...