[英]What exactly should a model contain in 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;}
}
代碼將運行,但您不想獲取實體的全部屬性,只有少數並且顯然不是與其相關的實體。 如果您執行他們提供的版本,則代碼將需要更多時間來編譯並且容易出錯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.