当 Dapper 尝试读取空数据库字段时,我收到空引用异常。怎么办?



我使用的是C#.Net和最新版本的Dapper。当Dapper从数据库中读取记录时,我刚开始得到一个null引用异常,但它试图检索的字段是null。我该怎么办?

以下是我认为相关的代码:

using (DapperInit.conn)
{
try
{
ProjectRollup projectRollup = new ProjectRollup();
// get the Jobs in this Project
string sql = "select JobID, JobName, TaxRate, ScheduledStart from [Jobs] where ProjectID = @ProjectID";
IEnumerable<JobForRollup> jobs = DapperInit.conn.Query<JobForRollup>(sql, new { ProjectID = projID });
// get the Discount rate for the project
sql = "select Discount from [Projects] where ProjectID = @ProjectID";
projectRollup.Discount = DapperInit.conn.Query<int>(sql, new { ProjectID = projID }).FirstOrDefault();

以下是ProjectRollup类的样子(如果重要的话(:

public class WorkItemForRollup
{
public Guid TaskID { get; set; }
public string Description { get; set; }
public bool Taxable { get; set; }
public decimal Price { get; set; }
public DateTime ScheduledDate { get; set; }
}
public class JobForRollup
{
public Guid JobID { get; set; }
public string JobName { get; set; }
public decimal TaxRate { get; set; }
public decimal Price { get; set; }
public DateTime ScheduledStart { get; set; }
public List<WorkItemForRollup> WorkItems { get; set; } = new List<WorkItemForRollup>();
}
public class ProjectRollup
{
public decimal Total { get; set; }
public int Discount { get; set; }
public List<JobForRollup> Jobs { get; set; } = new List<JobForRollup>();
}

我成功地从Dapper获得了jobs数据,并且有一条记录是我的ProjectID = projID,但Discount字段恰好为null。由于Discount是一个可以为null的字段,我该怎么做才能防止出现null引用异常?(顺便说一句,如果我声明Discount为int?也没关系——我仍然得到例外。(

我刚刚拿到!我需要将Discount声明为int?并且我还需要告诉Dapper数据类型是int?。因此,有问题的代码行必须是:

int? discount = DapperInit.conn.Query<int?>(sql, new { ProjectID = projID }).FirstOrDefault();

它有效!

最新更新