【发布时间】:2019-05-08 20:23:22
【问题描述】:
我正在使用 dapper 从表中查询数据,然后将其转换为对象。当它被转换为对象时,guid 属性设置为全零,但所有其他道具都设置正确。
public class UserStuff
{
public int Id { get; set; }
public Guid UId { get; set; }
}
public async Task<UserStuff> GetUserStuff(Guid uId){
using(IDbConnection conn = Connection){
string sQuery = "SELECT TOP 100 id, u_id " +
"FROM TestTable WHERE u_id = @u_id ";
conn.Open();
var result = await conn.QueryAsync<UserStuff>(sQuery, new { u_id = uId });
return result.FirstOrDefault();
}
}
示例 SQL 数据:
标识 | u_id
5 | C9DB345B-D460-4D71-87E0-D9A3B5CE1177
它正在返回: id 为 5,guid 为全零
【问题讨论】:
-
这似乎是 Dapper 的一个已知问题,请参阅 github.com/StackExchange/Dapper/issues/447 和 stackoverflow.com/questions/5898988/…)。
-
我不确定您粘贴的链接是否与从 db 查询现有 guid 有关。它看起来像是用于创建指南。我正在尝试从 sql 查询 guid。
-
@ironman
UserStuff类中的属性名为UId,但 SQL 表中的列名为u_id。 Dapper 是否会自动进行一些名称匹配以将u_id转换为UId?如果没有,您可以使用别名返回名称为UId的值吗? -
@Progman 所以,你是说我的实体中的命名约定必须与表列名完全一致吗?
-
@ironman 看起来有一个东西叫
DefaultTypeMap.MatchNamesWithUnderscores。也许这会有所帮助。