Я получаю исключение нулевой ссылки, когда Dapper пытается прочитать нулевое поле базы данных.Что делать? - PullRequest
0 голосов
/ 16 ноября 2018

Я использую C # .Net и последнюю версию Dapper.Я только начал получать исключение нулевой ссылки, когда Dapper читает запись из базы данных, но поле, которое он пытается получить, является нулевым.Что я могу с этим поделать?

Далее следует то, что я считаю подходящим кодом:

        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>();
}

Я успешно получаю данные jobs от Dapper, и есть запись, такая что мой ProjectID = projID, но поле Скидка оказывается пустым.Что я могу сделать, чтобы предотвратить исключение нулевой ссылки, потому что Discount является пустым полем?(Кстати, не имеет значения, если я объявлю Discount равным int? - я все равно получу исключение.)

1 Ответ

0 голосов
/ 16 ноября 2018

Я только что понял!Мне нужно объявить Discount как int? и Мне также нужно сказать Дапперу, что тип данных int?.Следовательно, строка кода, которая нарушает работу, должна быть:

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

Работает!

...