Ответ
Навигационное свойство (Navigation Property) в Entity Framework — это свойство в классе сущности, которое представляет связь с другой сущностью (или коллекцией сущностей) в модели данных. Оно позволяет удобно перемещаться (навигация) по графу связанных объектов, не написавая явных JOIN-запросов.
Типы навигационных свойств:
- Ссылочное навигационное свойство: Указывает на одну связанную сущность (отношение "один-ко-многим" или "один-к-одному").
- Коллекционное навигационное свойство: Представляет коллекцию связанных сущностей (отношение "один-ко-многим" или "многие-ко-многим").
Пример модели с навигационными свойствами:
public class Blog // Главная сущность
{
public int BlogId { get; set; }
public string Url { get; set; }
// Коллекционное навигационное свойство: у одного Blog много Post
public List<Post> Posts { get; set; }
}
public class Post // Зависимая сущность
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; } // Внешний ключ (foreign key)
// Ссылочное навигационное свойство: каждый Post принадлежит одному Blog
public Blog Blog { get; set; }
}
Использование в запросах (Eager Loading):
// Загрузить блоги вместе со всеми связанными постами за один запрос
var blogsWithPosts = context.Blogs
.Include(b => b.Posts) // Используем Include для навигационного свойства
.ToList();
// После загрузки можно навигировать по объектам
foreach (var blog in blogsWithPosts)
{
Console.WriteLine($"Blog: {blog.Url}");
foreach (var post in blog.Posts) // Используем навигационное свойство Posts
{
Console.WriteLine($" - Post: {post.Title}");
}
}
Как это работает: EF Core использует эти свойства, чтобы понять связи между таблицами в БД, и автоматически генерирует соответствующие SQL-запросы с JOIN. Внешние ключи (как BlogId в Post) обычно представляют собой свойства внешнего ключа, которые работают в паре с навигационными свойствами.