Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core MVC中的模型应该包含什么?_Asp.net Core_Model View Controller_Asp.net Core Mvc - Fatal编程技术网

Asp.net core MVC中的模型应该包含什么?

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

我最近阅读了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<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环境中的含义有更深入理解的人那里看到这篇文章: