C# ASP.NET MVC核心中EF映射类的列表返回视图

C# ASP.NET MVC核心中EF映射类的列表返回视图,c#,asp.net-mvc,entity-framework,asp.net-core,asp.net-core-mvc,C#,Asp.net Mvc,Entity Framework,Asp.net Core,Asp.net Core Mvc,我将ASP.NET MVC Core与EF 1.1.0和LocalDB一起使用,并尝试搜索博客id(从url GET获得),然后发送以查看博客的帖子列表 大部分代码取自microsoft文档示例 数据库上下文: public class BloggingContext : DbContext { public BloggingContext(DbContextOptions<BloggingContext> options) : base(options)

我将ASP.NET MVC Core与EF 1.1.0和LocalDB一起使用,并尝试搜索博客id(从url GET获得),然后发送以查看博客的帖子列表

大部分代码取自microsoft文档示例

数据库上下文:

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; }
}
公共类BloggingContext:DbContext
{
公共博客上下文(DbContextOptions)
:基本(选项)
{ }
公共数据库集博客{get;set;}
公共DbSet Posts{get;set;}
}
公共类博客
{
public int BlogId{get;set;}
公共字符串Url{get;set;}
公共列表发布{get;set;}
}
公营职位
{
公共int PostId{get;set;}
公共字符串标题{get;set;}
公共字符串内容{get;set;}
public int BlogId{get;set;}
公共博客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
    }
}
public类BlogsController:Controller
{
私有只读BloggingContext_context;
公共博客控制器(博客上下文)
{
_上下文=上下文;
}
//获取:Blogs/Details/5
公共异步任务详细信息(int?id)
{
if(id==null)
{
返回NotFound();
}
var blog=await\u context.Blogs
.SingleOrDefaultAsync(m=>m.BlogId==id);
如果(blog==null)
{
返回NotFound();
}
return View(blog.Posts);//这可能是问题所在
}
}
视图:

@model IEnumerable
细节
@foreach(模型中的var项目){
@项目.标题
}
我得到一张空桌子。。有人能帮忙吗


谢谢。

您需要使用Include来确保您的查询能够为博客获取相关帖子

 var blog = await _context.Blogs
            .SingleOrDefaultAsync(m => m.BlogId == id);
必须改为

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

您需要使用Include来确保您的查询能够为博客获取相关帖子

 var blog = await _context.Blogs
            .SingleOrDefaultAsync(m => m.BlogId == id);
必须改为

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

谢谢这很有效。包含(“帖子”)部分必须在博客之后,而不是结尾。通常正确,但是
包含
应该在
之前。SingleOrDefault
。谢谢!这很有效。Include(“Posts”)部分必须在blog之后,而不是结尾。通常正确,但
Include
应该在
之前。SingleOrDefault