В Entity Framework Core управление отношениями «один ко многим» является фундаментальным аспектом создания надежных и масштабируемых приложений. В этой статье вы найдете подробное руководство по обновлению отношений «один ко многим» с помощью Entity Framework Core. Мы рассмотрим различные методы и предоставим примеры кода, которые помогут вам лучше понять концепции.
- Добавление связанных объектов.
Чтобы установить связь «один ко многим», вам необходимо связать объекты друг с другом. Предположим, у нас есть две сущности:AuthorиBook, где у автора может быть несколько книг. Чтобы добавить книгу конкретного автора, вы можете использовать следующий код:
var author = dbContext.Authors.Find(authorId);
var book = new Book { Title = "Sample Book" };
author.Books.Add(book);
dbContext.SaveChanges();
- Удаление связанных объектов.
Чтобы удалить книгу из коллекции автора, вы можете использовать следующий код:
var author = dbContext.Authors.Find(authorId);
var bookToRemove = author.Books.FirstOrDefault(b => b.Id == bookId);
if (bookToRemove != null)
{
author.Books.Remove(bookToRemove);
dbContext.SaveChanges();
}
- Обновление связанных объектов.
Чтобы обновить сведения о книге для конкретного автора, вы можете использовать следующий код:
var author = dbContext.Authors.Find(authorId);
var bookToUpdate = author.Books.FirstOrDefault(b => b.Id == bookId);
if (bookToUpdate != null)
{
bookToUpdate.Title = "Updated Book Title";
dbContext.SaveChanges();
}
- Жаркая загрузка.
Женская загрузка позволяет получать связанные сущности вместе с основной сущностью в одном запросе, сокращая количество циклов обработки базы данных. Чтобы быстро загрузить книги автора, вы можете использовать методInclude:
var author = dbContext.Authors
.Include(a => a.Books)
.SingleOrDefault(a => a.Id == authorId);
- Отложенная загрузка (неявная).
По умолчанию Entity Framework Core включает отложенную загрузку свойств навигации. Это означает, что связанные объекты автоматически загружаются из базы данных при доступе. Чтобы включить отложенную загрузку, убедитесь, что ваши свойства навигации отмечены какvirtual:
public class Author
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Book> Books { get; set; }
}