我在存储库中使用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))));
}
以下是填充列表的存储库方法:
public IEnumerable<Dog> GetAll()
{
var dogs = Db.Query<Dog>(@"SELECT Id, Name FROM Dogs");
return dogs;
}
这是我的目标:
[DataContract]
public class Dog
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
}
所以我已经确认“dogs”变量被填充,但所有Id和Name元素都是0或null。以下是最终的JSON结果:
[
{
Id: 0,
Name: null
},
{
Id: 0,
Name: null
},
{
Id: 0,
Name: null
}
]
我还尝试向属性添加列属性,例如[Column(Name = "Id")]
。仍然没有运气。我在俯瞰什么?
修改 我能够使用此related answer中的示例代码和要点来解决此问题。
答案 0 :(得分:2)
您似乎有一个使用[Column("Id")]
等定义/识别列的自定义地图。但是,您尚未添加此属性 - 因此不会找到任何列...