Oтношение моделей 'один-ко многим', где 'один' пустой. (Entity Frameworke)
Модель 'Tетрадь'.
Не имеет своего содержания и полностью состоит из 'Записей',
которые добавляются некоторым переменным количеством.
Id будет одинаковым у добавленных вместе записей, хотя особого смысла в нём тут нет.
public class Notebook
{
public int Id { get; set; }
public List<Record> Records { get; set; } = new();
}
Модель 'Запись'.
public class Record
{
public int Id { get; set; }
public string Title { get; set; }
public string Text { get; set; }
public int NotebookId { get; set; }
public Notebook Notebook { get; set; }
}
Смущает то что Notebook выступает тут как пустой контейнер. Так можно делать?
Ответы (1 шт):
Почему именно пустой контейнер? Это свойство выступает в качестве связи между двумя типами для Entity Framework. Если вы будете делать выборку из базы данных, просто используйте .Include (аналогия left join) что бы заполнить этот объект.
Так же стоит учесть, что Id не может быть одинаковым для двух или более Record, потому что (если) это есть Primary Key, тогда вы получите ошибку при добавлении в базу данных
Технически, у вас связь not nullable, это видно по Foreign Key
public int NotebookId { get; set; }
Это значит, что у вас Notebook может иметь значение null в случае, если вы не использовали .Include при выборке. Если бы эта связь была nullable, это выглядело бы вот так:
public int? NotebookId { get; set; }
Такая запись обозначала бы то, что Record мог бы существовать без привязки к Notebook (хотя это и не логично). В таком случае, даже после использования .Include значение Notebook было бы null для тех записей, которые существуют сами по себе
Хорошая статья об запросе связанных данных