我正在使用 Dapper通过存储过程进行一些只读数据库调用。我有一个查询,要么返回 1 行,要么什么都不返回。
我正在像这样使用 Dapper:
using (var conn = new SqlConnection(ConnectionString))
{
conn.Open();
return conn.Query<CaseOfficer>("API.GetCaseOfficer",
new { Reference = reference },
commandType: CommandType.StoredProcedure).FirstOrDefault();
}
返回的 CaseOfficer 对象如下所示:
public class CaseOfficer
{
public string Title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Telephone { get; set; }
}
然后通过 ASP.NET Web API 应用程序将其作为 JSON 返回。
当存储过程返回结果时,我得到以下结果:
{
title: "Mr",
firstName: "Case",
lastName: "Officer",
email: "test@example.com",
telephone: "01234 567890"
}
但是当它什么都不返回时我得到:
{
title: null,
firstName: null,
lastName: null,
email: null,
telephone: null
}
我怎样才能让 Dapper 返回 null(这样我就可以检查并用 404 响应),而不是默认值(CaseOfficer)?
最佳答案
如果您的 SP 没有返回一行,那么 dapper 也不会返回一行;所以首先要检查的是:您的 SP 是否返回了一个空行?一排所有 null
?还是返回了 0 行?
现在,假设没有返回任何行,如果 CaseOfficer
是class
,如果 CaseOfficer
是 struct
,则为默认实例。所以接下来:检查 CaseOfficer
是一个 类
(我想不出有什么理智的理由可以成为一个 struct
)。
但是:使用 FirstOrDefault
的 dapper 通常已经您想要的了。
关于c# - 如何从 Dapper 查询而不是 default(T) 返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11720611/