asp.net-core - 模型在 MVC 中究竟应该包含什么?
问题描述
我最近一直在阅读微软关于 ASP.NET Core 的教程,并看到该教程的控制器类包括 LINQ 查询以从数据库中获取数据。例如,该教程的代码片段如下所示:
// GET: Movies
public async Task<IActionResult> Index(string movieGenre, string searchString)
{
// Use LINQ to get list of genres.
IQueryable<string> genreQuery = from m in _context.Movie
orderby m.Genre
select m.Genre;
var movies = from m in _context.Movie
select m;
if (!string.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
if (!string.IsNullOrEmpty(movieGenre))
{
movies = movies.Where(x => x.Genre == movieGenre);
}
var movieGenreVM = new MovieGenreViewModel
{
Genres = new SelectList(await genreQuery.Distinct().ToListAsync()),
Movies = await movies.ToListAsync()
};
return View(movieGenreVM);
}
我的问题如下:模型类究竟包含什么?在我阅读的所有关于 MVC 模式的文章中,我被建议将我从数据库中获取数据的函数放入模型类中。那么他们在本教程中做错了吗?
解决方案
模型类是 DTO,您可以在此处阅读有关它们的更多信息:https ://docs.microsoft.com/en-us/aspnet/web-api/overview/data/using-web-api-with-entity-framework /第 5 部分
您拥有的代码中没有错误,这只是一种不好的做法。实体和 DTO 之间的主要区别在于您没有提及与另一个 DTO 的关系。例如,当我们谈论我们拥有的实体时
public class Author{
public string name{get; set;}
public List<Book> Books {get; set;}
}
但是当我们谈论 DTO 时,我们将只有
public class Author{
public string name{get; set;}
}
代码将运行,但您不想获取实体的全部属性,只获取少数且显然不是与其相关的实体。如果您使用他们提供的版本,则代码将需要更多时间来编译并且容易出错。
推荐阅读
- ios - 如何在 UIView 顶部设置阴影?
- .net-core - 引用 Microsoft.EntityFrameworkCore.dll 时,Assembly.LoadFrom 失败
- c# - 命名空间不能在 C# 控制台程序中包含方法错误
- rest - 如何在空手道测试中在控制台中打印值
- php - 如何在多个下拉列表中打印多个数组值?
- c - 为什么我的 strlen 似乎在这个 for 循环中返回了两个值?
- javascript - “如何解决 Angular 中的 NGX 数据表复选框问题?”
- html - 如何在保持响应的同时将计算器保持在引导程序中并固定?
- javascript - 如何让一个 JS 计数器永久保留计数的数量?
- node.js - 如何在 PEM 文件中保留换行符,使用 NodeJS 将其拉入我的应用程序?