0

ASP.NET MVCコアをEF 1.1.0とLocalDBで使用し、ブログID(URLから取得)を検索してから送信しますブログの投稿一覧を表示します。ASP.NET MVCコアのEFマップクラスからリストのビューを返します

ほとんどのコードは、マイクロソフトのドキュメントの例から引用したものです。

DBコンテキスト:

public class BloggingContext : DbContext 
{ 
    public BloggingContext(DbContextOptions<BloggingContext> options) 
     : base(options) 
    { } 

    public DbSet<Blog> Blogs { get; set; } 
    public DbSet<Post> Posts { get; set; } 
} 

public class Blog 
{ 
    public int BlogId { get; set; } 
    public string Url { get; set; } 

    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; } 
    public Blog Blog { get; set; } 
} 

コントローラー:

public class BlogsController : Controller 
{ 
    private readonly BloggingContext _context; 

    public BlogsController(BloggingContext context) 
    { 
     _context = context;  
    } 

    // GET: Blogs/Details/5 
    public async Task<IActionResult> Details(int? id) 
    { 
     if (id == null) 
     { 
      return NotFound(); 
     } 

     var blog = await _context.Blogs 
      .SingleOrDefaultAsync(m => m.BlogId == id); 
     if (blog == null) 
     { 
      return NotFound(); 
     } 

     return View(blog.Posts); // HERE IS PROBABLY THE PROBLEM 
    } 
} 

ビュー:

@model IEnumerable<EFGetStarted.AspNetCore.NewDb.Models.Post> 

<h2>Details</h2> 

<table> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @item.Title 
     </td> 
    </tr> 
} 

</table> 

と私は、空のテーブルを取得...誰でも助けることができますか?

ありがとうございました。

答えて

2

ブログの関連する投稿をクエリに含めるには、インクルードを使用する必要があります。

var blog = await _context.Blogs 
      .SingleOrDefaultAsync(m => m.BlogId == id); 

var blog = await _context.Blogs.Include("Posts") 
      .SingleOrDefaultAsync(m => m.BlogId == id); 
+0

おかげに変更する必要があります!それは動作します。インクルード(「投稿」)の部分は、ブログの後にある必要があり、最後ではありません。 – abcde

+0

一般的に正しいですが、 'Include'は' .SingleOrDefault'の前にあるべきです。 –

+0

ありがとう、更新された回答 –

関連する問題