C# DB Advanced Retake Exam - 14 August 2020

Здравейте, имам следните въпроси към задачите от retake-a на 14 август:

1. При създаване на базата ми дава следната грешка, ако пропусна да дам CellId nullable:

"Unhandled Exception: System.Data.SqlClient.SqlException: Introducing FOREIGN KEY constraint 'FK_OfficersPrisoners_Prisoners_PrisonerId' on table 'OfficersPrisoners' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints."

С този код се създава базата

builder.Entity<OfficerPrisoner>()

........

.HasForeignKey(op => op.PrisonerId)

.OnDelete(DeleteBehavior.Restrict);

, но не мога да си отговоря на въпроса защо се получава тази грешка. Знам само, че при Multiple Relations се налага да се смени дефолтното поведение при изтриване, но тук не виждам такава връзка. В допълнение на чуденето ми е и това, че когато се сетне пропъртито CellId да е nulldble, тази грешка изчезва. Защо тогава в авторското решение остава тази смяна на поведението при изтриване? Явно нещо съм пропуснала по време на курса и ще съм много благодарна ако някой колега отдели време да ми обясни от къде идва проблема.

2. При 2 задача с import-ите съм се престарала с проверките и ми изгърмяха и нулевите тестове при 2 и 3 import.

При import PrisonersMails, проверявам CellId:

int? cellId = null;

if (!string.IsNullOrEmpty(prisonerMailsDto.CellId.ToString()))

{

cellId = context.Cells

.FirstOrDefault(c => c.Id == prisonerMailsDto.CellId)

.Id;

if (cellId == null)

{

sb.AppendLine(ErrorMessage);

continue;

}

}

При import OfficersPrisoners, проверявам DepartmentId:

var department = context.Departments

.FirstOrDefault(d => d.Id == officerDto.DepartmentId);

if (department == null)

{

sb.AppendLine(ErrorMessage);

continue;

}

Като махна въпросните проверките всичко минава в Judge, но се чудя защо дава грешка в Judge. В нулевите тестове няма невалидни стойности /за CellId и DepartmentId/ и нямам разлика в изходния стринг, но пак не минават в Judge. Къде бъркам в проверките? Не трябва ли тестовете да гърмят ако липсва проверка, а не ако има допълнителна проверка, която ще предпази от грешка при въвеждане в базата с данни. Нали базата ще даде грешка ако се опитаме да въведем грешно Id за cell и department?

Много благодаря предварително!

П.П. Ето и линк към задачите в Judge:

https://judge.softuni.bg/Contests/2533/CSharp-DB-Advanced-Retake-Exam-14-August-2020