EF Core FindAsync возвращает только корневой объект - PullRequest
0 голосов
/ 02 января 2019

У меня есть отношение многие ко многим, и я использую ASP.Net Core2.2 MVC с EF.

Из того, что я прочитал, я понимаю, что в настоящее время мне нужно создать класс CLR для таблицы соединений.

Мой код:

Модели:

public class Post
{
    public Post()
    {
        Categories= new List<PostCategory>();
    }
    public int Id { get; set; }
    [Required]
    public string Title { get; set; }
    [Required]
    public string Description { get; set; }
    public List<PostCategory> Categories { get; set; }
}

public class Category
  {
      public Category()
      {
          Posts= new List<PostCategory>();
      }
      public int Id { get; set; }
      [Required]
      public string Name { get; set; }
      public ICollection<PostCategory> Posts { get; set; }
    }
public class PostCategory
{
    public int PostId { get; set; }
    public Post Post { get; set; }

    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

DbContext:

 public class MyDBContext:DbContext
{
    public MyDBContext()
    {

    }
    public MyDBContext(DbContextOptions<MyDBContext> options) : base(options)
    {

    }
    public DbSet<Post> Post { get; set; }

    public DbSet<Category> Category { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<PostCategory>()
            .HasKey(x => new { x.PostId, x.CategoryId });
        modelBuilder.Entity<PostCategory>()
            .HasOne(x => x.Post)
            .WithMany(m => m.Categories)
            .HasForeignKey(x => x.PostId);
        modelBuilder.Entity<PostCategory>()
            .HasOne(x => x.Category)
            .WithMany(e => e.Posts)
            .HasForeignKey(x => x.CategoryId);
    }
}

Создать почтовый индекс:

var categories= new List<PostCategory>();
foreach (var category in model.SelectedCategories)
 {
  categories.Add(new PostCategory()
   {
      CategoryId= category
    });
 }
model.Post.Categories.AddRange(categories);
_context.Post.Add(model.Post);
await _context.SaveChangesAsync();

Когда я создаю сообщение, я вижу в базе данных, что у меня есть данные сообщения, а в таблице PostCategory я вижу PostId CategoryId, как и должно быть.

Моя проблема возникает, когда я пытаюсь получить данные поста, используя:

var post = await _context.Post.FindAsync(id);

post.Categories всегда равно 0, что мне не хватает?

1 Ответ

0 голосов
/ 02 января 2019

Вам нужно написать свой запрос следующим образом, чтобы быстро загрузить соответствующую Categories с Post:

var post =  await _context.Post.Include(p => p.Categories).FirstOrDefaultAsync(p => p.Id == id);

Вот более подробная информация о Загрузка связанных данных в ядре EF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...