Asp.net core MVC中的模型应该包含什么?
我最近阅读了Microsoft关于ASP.NET Core的教程,看到该教程中的控制器类包括用于从数据库获取数据的LINQ查询。例如,该tutrorial的代码片段如下所示:Asp.net core MVC中的模型应该包含什么?,asp.net-core,model-view-controller,asp.net-core-mvc,Asp.net Core,Model View Controller,Asp.net Core Mvc,我最近阅读了Microsoft关于ASP.NET Core的教程,看到该教程中的控制器类包括用于从数据库获取数据的LINQ查询。例如,该tutrorial的代码片段如下所示: // GET: Movies public async Task<IActionResult> Index(string movieGenre, string searchString) { // Use LINQ to get list of genres. IQueryable<st
// 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);
}
//获取:电影
公共异步任务索引(字符串电影类型、字符串搜索字符串)
{
//使用LINQ获取流派列表。
IQueryable genreQuery=来自m in_context.Movie
orderby m.流派
选择m.流派;
var movies=来自m in _context.Movie
选择m;
如果(!string.IsNullOrEmpty(searchString))
{
movies=movies.Where(s=>s.Title.Contains(searchString));
}
如果(!string.IsNullOrEmpty(电影流派))
{
电影=电影。其中(x=>x.Genre==movieGenre);
}
var movieGenreVM=新的MovieGenreViewModel
{
类型=新建选择列表(等待genreQuery.Distinct().toListSync()),
电影=等待电影。ToListSync()
};
返回视图(movieGenreVM);
}
我的问题是:模型类到底包含什么?在我阅读的所有关于MVC模式的文章中,我被建议将从数据库获取数据的函数放入模型类中。因此,他们在本教程中犯了错误吗?模型类是DTO,您可以在此处阅读更多关于它们的内容: 您的代码中没有错误,这只是一种不好的做法。实体和DTO之间的主要区别在于您没有提到与另一个DTO的关系。例如,当我们谈论实体时,我们有
public class Author{
public string name{get; set;}
public List<Book> Books {get; set;}
}
代码将运行,但您不希望获取实体的全部属性,只获取少数属性,显然不希望获取与其相关的实体。如果您使用他们提供的版本,代码将需要更多的时间来编译,并且很容易出错 模型类是DTO,您可以在此处阅读有关它们的更多信息: 您的代码中没有错误,这只是一种不好的做法。实体和DTO之间的主要区别在于您没有提到与另一个DTO的关系。例如,当我们谈论实体时,我们有
public class Author{
public string name{get; set;}
public List<Book> Books {get; set;}
}
代码将运行,但您不希望获取实体的全部属性,只获取少数属性,显然不希望获取与其相关的实体。如果您使用他们提供的版本,代码将需要更多的时间来编译,并且很容易出错 你的模型应该是你的世纪。在您的示例中,模型是用于查询数据库的
电影
实体。这应该存在于Models文件夹中。不是数据库查询。只有电影类及其所有属性。我认为“MVC”框架有点隐藏了这一点,但获取/更新通常要晚很多,而且有点幕后。。。(不是在执行LINQ查询时…lambda在那里隐藏了很多…提取可能是在调用.ToList时完成的?因此框架中有一个超级模型处理所有这些数据库调用)“movieGenreVM”模型是一个“视图模型”并且只是视图中要使用的数据。也可以从对MVC在web环境中的含义有更深入理解的人那里看到这篇文章:您的模型应该是您的entties。在您的示例中,模型是用于查询数据库的电影
实体。这应该存在于Models文件夹中。不是数据库查询。只有电影类及其所有属性。我认为“MVC”框架有点隐藏了这一点,但获取/更新通常要晚很多,而且有点幕后。。。(不是在执行LINQ查询时…lambda在那里隐藏了很多…提取可能是在调用.ToList时完成的?因此框架中有一个超级模型处理所有这些数据库调用)“movieGenreVM”模型是一个“视图模型”并且只是视图中要使用的数据。也可以从对MVC在web环境中的含义有更深入理解的人那里看到这篇文章: