2016-09-10 2 views
0

Вопрос: Как и где метод расширения «Include», используемый в способе Index() действия, в следующем PostController используется в Inxex.cshtml view показано ниже? Как я понимаю, _context.Posts.Include(p => p.Blog) означает все сообщения, относящиеся к таблице блогов. Но я не вижу использование свойства blog class or blogId в представлении Index.cshtml ниже?Использование Включить в Entity Framework Ядро

фон: В ASP.NET MVC Жила - проект Code First Я следую this ASP.NET official site tutorial, где они имеют следующие классы модели для Blog (родителя) и Post (ребенка). Затем я создал контроллер (как показано ниже) с помощью MVC Controller with Views, using Entity Framework мастера, где я выбрал Post модель в модели DialogBox .:

Модель:

using Microsoft.EntityFrameworkCore; 
using System.Collections.Generic; 

namespace EFGetStarted.AspNetCore.NewDb.Models 
{ 
    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; } 
    } 
} 

PostController:

public class PostsController : Controller 
{ 
     private readonly BloggingContext _context; 

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

     // GET: Posts 
     public async Task<IActionResult> Index() 
     { 
      var bloggingContext = _context.Posts.Include(p => p.Blog); 
      return View(await bloggingContext.ToListAsync()); 
     } 
} 

Index.cshtml для действия Index() в PostController:

@model IEnumerable<ASP_Core_Blogs.Models.Post> 

@{ 
    ViewData["Title"] = "Index"; 
} 

<h2>Index</h2> 

<p> 
    <a asp-action="Create">Create New</a> 
</p> 
<table class="table"> 
    <thead> 
     <tr> 
      <th> 
       @Html.DisplayNameFor(model => model.Content) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.Title) 
      </th> 
      <th></th> 
     </tr> 
    </thead> 
    <tbody> 
@foreach (var item in Model) { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.Content) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Title) 
      </td> 
      <td> 
       <a asp-action="Edit" asp-route-id="@item.PostId">Edit</a> | 
       <a asp-action="Details" asp-route-id="@item.PostId">Details</a> | 
       <a asp-action="Delete" asp-route-id="@item.PostId">Delete</a> 
      </td> 
     </tr> 
} 
    </tbody> 
</table> 

ответ

0

Поскольку вы не используете свойство Blog, лучше не использовать Include (p => p.Blog). Это добавит дополнительное соединение, которое не требуется. Однако, если вы укажете его в каждой строке таблицы, тогда его следует включать, чтобы избежать ленивых проблем с загрузкой.

Смежные вопросы