0

我使用帶有EF 1.1.0和LocalDB的ASP.NET MVC Core,並嘗試搜索博客ID(從url GET獲得),然後發送到查看博客的帖子列表。在ASP.NET MVC Core中從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

您需要使用Include來確保您的查詢拉入博客的相關帖子。

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

必須改變,以

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

謝謝!這樣可行。 Include(「Posts」)部分需要位於「博客」之後,而不是末尾。 – abcde

+0

一般正確,但'Include'應該在'.SingleOrDefault'之前。 –

+0

感謝您收到該更新後的答案 –