Рассмотрим следующую модель данных EF core 3.1:
public class Blog
{
public int Id { get; set; }
public string Name { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int Id { get; set; }
public string Author { get; set; }
public DateTime Date { get; set; }
public Blog Blog { get; set; }
public int BlogId { get; set; }
}
public class BlogAppContext: DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=DB_BLOG_APP;Integrated Security=SSPI;MultipleActiveResultSets=True");
}
public DbSet<Post> Posts { get; set; }
public DbSet<Blog> Blogs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.HasMany(x => x.Posts)
.WithOne(x => x.Blog)
.HasForeignKey(x => x.BlogId)
.IsRequired();
}
}
Рассмотрим сценарий, в котором я запускаю следующий запрос, используя нетерпеливую загрузку:
static void Main(string[] args)
{
using var context = new BlogAppContext();
var blogs = context.Blogs.Include(x => x.Posts).ToList();
foreach (var blog in blogs)
{
Console.WriteLine($"There are {blog.Posts.Count} posts");
}
}
Глядя на некоторые примеры, я заметил, что инициализация свойств навигации по списку является обычной практикой. В моем случае это приведет к чему-то вроде этого:
public class Blog
{
public int Id { get; set; }
public string Name { get; set; }
public List<Post> Posts { get; set; } = new List<Post<();
}
Я спрашиваю, действительно ли это полезно при запросе через нетерпеливую загрузку.
Я провел несколько тестов и убедился, что показанный выше запрос автоматически создает пустой список для блога, в котором нет сообщений.
Иными словами, кажется, что даже если свойство навигации Posts
не инициализируется пустым списком внутри определения сущности Blog
, запрос, использующий нетерпеливую загрузку, не заботится и не< /strong> вернуть значение null
для свойства навигации Posts
.
Правильно ли я понимаю?
Если да, то какова польза (если есть) от инициализации свойства навигации Posts
пустым списком при запросе к базе данных с использованием нетерпеливой загрузки для загрузки связанных сущностей?
Blog
сPosts
наnull
? - person Deivydas Voroneckis   schedule 18.09.2020