Давайте посмотрим на простых примерах класса:Как эффективно работать с ядром Entity Framework?
public class Book
{
[Key]
public string BookId { get; set; }
public List<BookPage> Pages { get; set; }
public string Text { get; set; }
}
public class BookPage
{
[Key]
public string BookPageId { get; set; }
public PageTitle PageTitle { get; set; }
public int Number { get; set; }
}
public class PageTitle
{
[Key]
public string PageTitleId { get; set; }
public string Title { get; set; }
}
Так что, если я хочу, чтобы получить все PageTitiles, если бы я знал только BookID, мне нужно написать несколько включает в себя, например:
using (var dbContext = new BookContext())
{
var bookPages = dbContext
.Book
.Include(x => x.Pages)
.ThenInclude(x => x.PageTitle)//.ThenInclude(x => x.Select(y => y.PageTitle)) Shouldn't use in EF Core
.SingleOrDefault(x => x.BookId == "some example id")
.Pages
.Select(x => x.PageTitle);
}
И если я хочу получить PageTitles, связанные с другой книгой, мне нужно снова переписать этот метод, и ничего не изменилось, кроме BookId! Это очень неэффективный способ работы с базой данных, в этом примере у меня есть 3 класса, но если бы у меня было сотни классов, вложенных в очень глубокий уровень, было бы очень медленно и неудобно работать.
Как именно я должен организовать работу с моей базой данных, чтобы избежать многих включений и избыточных запросов?
Страницы в классной книге должны быть объявлены как виртуальная коллекция. PageTitle в bookPage должен быть объявлен int PageTitleId и должен иметь аннотацию данных ForeignKey. PageTitleId в PageTitle должен быть объявлен как int, а не строка ... как стартер. – bilpor
Если вы не уверены в том, как работает EF. Сначала выполните БД. Создайте базу данных в базе данных. Убедитесь, что у вас установлены инструменты Powerivity для VS и обратного проектирования, указав на БД, и EF создаст для вас все классы и т. Д. – bilpor
@bilpor, но, например [здесь] (https://ef.readthedocs.org/ru/latest/modeling/relationships.html), у нас есть список nly без какого-либо виртуального ключевого слова. И ссылается на [this] (https://ef.readthedocs.org/en/latest/modeling/relationships.html#single-navigation-property), нам не нужно определять внешние ключи. Я уверен, как это работает, я не уверен, как эффективно работать с ним. –