【发布时间】:2019-12-22 19:07:56
【问题描述】:
我最近一直在阅读 Microsoft 关于 ASP.NET Core 的教程,并看到该教程的控制器类包含 LINQ 查询以从数据库中获取数据。例如,该教程的代码 sn-p 如下所示:
// 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 模式的文章中,我被建议将我从数据库中获取数据的函数放入模型类中。那么他们在本教程中做错了吗?
【问题讨论】:
-
你的模型应该是你的实体。在您的示例中,模型是您在其中查询数据库的
Movie实体。这应该存在于 Models 文件夹中。不是数据库查询。只是包含所有属性的 Movie 类。 -
我认为“MVC”框架隐藏了这一点,但获取/更新通常发生得更晚,而且有点在幕后......(不是当你执行 LINQ 查询时...... lambda 在那里隐藏了很多...当调用 .ToList 时可能会完成获取?所以框架中有一个超级模型处理所有这些数据库调用)“movieGenreVM”模型是一个“视图模型”,只是数据在视图中使用。
-
另见这篇文章来自对 MVC 在 Web 上下文中的含义有更深入理解的人:stackoverflow.com/questions/5863870/…
标签: asp.net-core model-view-controller asp.net-core-mvc