Как пропустить NullReferenceException в Get API - PullRequest
0 голосов
/ 18 февраля 2020

Здесь создайте API для получения записей, в моей таблице отношений сущностей есть две даты начала и окончания. Здесь мое принуждение является одним из них, чтобы поддерживать нулевой тип.

Вот ER, который является SchoolCourses:

 public class SchoolCourses
{
    public Guid ID { get; set; }

    public DateTime StartCourseDate { get; set; } 
    public DateTime EndCourseDate { get; set; } 

    public DateTime? StartSemDate { get; set; }  // Null able type
    public DateTime? EndSemDate { get; set; }  // Null able type

}

Я создаю хранилище для получения значения:

public async Task<ICollection<SchoolCourses>> GetcourseBySchoolId(Guid SchoolId)
    {
        List<SchoolCourses> schoolCourses = null;

            schoolCourses = await _GpsContext.SchoolCourses.AsNoTracking()
            .Where(x => x.SchoolsID == SchoolId)
            .ToListAsync();
        return schoolCourses;
    }

И контроллер выглядит так:

    public async Task<IActionResult> GetforSchoolCourse(string SchoolId)
    {
        var result = await _schoolCoursesRepository.GetcourseBySchoolId(Guid.Parse(SchoolId));
        List<GetSchoolCourseBySchoolIdVm> getSchoolCourseBySchoolIdVms = new List<GetSchoolCourseBySchoolIdVm>();

        foreach (SchoolCourses schoolCourse in result)
        {
            getSchoolCourseBySchoolIdVms.Add(new GetSchoolCourseBySchoolIdVm
            {
                id = schoolCourse.ID.ToString(),
                StarCoursetDate = schoolCourse.StartCourseDate.ToString(),
                EndCourseDate = schoolCourse.EndCourseDate.ToString(),
                StartSemDate = schoolCourse.StartSemDate.ToString(),
                EndSemDate = schoolCourse.EndSemDate.ToString(),

            });

        }
        return Ok(getSchoolCourseBySchoolIdVms);
    }

Вот модель для просмотра для справки:

public class GetSchoolCourseBySchoolIdVm
{
    public string id { get; set; }

    public string StarCoursetDate { get; set; } 
    public string EndCourseDate { get; set; } 

    public string StartSemDate { get; set; } 
    public string EndSemDate { get; set; } 

}

После выполнения всех вышеперечисленных действий возникает ошибка исключения в чванстве:

System.NullReferenceException: Object reference not set to an instance of an object.; 

1 Ответ

0 голосов
/ 18 февраля 2020

В вашей SchoolCourses модели StartSemDate и EndSemDate допускаются значения типа NULL, поэтому должно быть возможно, что значения этих полей равны нулю. Это должно было быть проверено перед его использованием, в отличие от того, что вы использовали

StartSemDate = schoolCourse.StartSemDate.ToString(),
EndSemDate = schoolCourse.EndSemDate.ToString(),

здесь, если любая из дат имеет значение null, то при вызове метода .ToString() для нее будет выброшено NullReferenceException. Используйте оператор безопасной навигации для проверки

schoolCourse.StartSemDate?.ToString()

или

schoolCourse.StartSemDate != null ? schoolCourse.StartSemDate.ToString() : string.Empty
...