Был бы благодарен за помощь в том, как отправить «коллекцию» объектов вместе со связанными объектами в представление MVC Razor.
Я получаю коллекцию всех объектов и связанных с ними объектов, используя многие длямногие с Entity Framework Core.Поэтому я считаю, что эта часть работает.
DbContext:
public DbSet<Post> Posts { get; set; }
public DbSet<Tag> Tags { get; set; }
public DbSet<PostTag> PostTags { get; set; }
OnModelCreating:
modelBuilder.Entity<PostTag>()
.HasKey(t => new { t.PostId, t.TagId });
modelBuilder.Entity<PostTag>()
.HasOne(p => p.Post)
.WithMany(pt => pt.PostTags)
.HasForeignKey(p => p.PostId);
modelBuilder.Entity<PostTag>()
.HasOne(t => t.Tag)
.WithMany(pt => pt.PostTags)
.HasForeignKey(t => t.TagId);
Контроллер (или репозиторий):
var tags = context.Tags
.Include(e => e.PostTags)
.ThenInclude(e => e.Post)
.ToList();
Если коллекция tags
используется в консольном приложении, я могу просмотреть ее следующим образом:
// Iterate over all tags and get the posts related to those tags
foreach (var tag in tags)
{
Console.WriteLine($"Tag: {tag.Text}");
foreach (var post in tag.PostTags.Select(e => e.Post))
{
Console.WriteLine($" post: {post.Title}");
}
}
... это прекрасно работает, и именно это поведение я хотел бы использовать в представлении MVC - представлять данные со списком всех "тегов" и соответствующих им "сообщений".
Как следуетViewModel будет настроен, и как эта модель будет использоваться в представлении при переборе всех объектов и связанных с ними объектов?