.Net Core Mvc 2. VS2022 + Core6.0 + Mvc 添加模型

发布时间 2023-06-20 15:36:44作者: luytest

上一章我们用ViewData传递数据,但是实际生产环境的数据通常都是用模型传递的。

添加模型Movie

在Model文件夹下新建一个Movie类,根据之前建的Movie表补全代码。

using System.ComponentModel.DataAnnotations;

namespace CoreMvcMovie.Models
{
    public class Movie
    {
        public int Id { get; set; }
        public string? Title { get; set; }

        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string? Genre { get; set; }
        public decimal Price { get; set; }
    }
}

[DataType(DataType.Date)]:DataType特性指定ReleaseDate的类型是Date,也就是不显示也不用输出时间部分。

 

引入EFCore依赖项

在Nuget中找到下面2个引用,添加进项目。

 

 

添加基架

右键项目添加,选择已搭建基架的新项,选择 视图使用 EF 的 MVC控制器

 下一步的选择如图,模型类选择之前新建的Movie类,上下文的话新项目没有,点后面的+号新建一个,这里我起名叫CoreMvcMovieContext,其他选项用默认的就好。

 生成成功后,首先在依赖项中,会增加几个新的引用,这是基架需要的依赖项。

Program.cs 文件中向依赖关系注入注册数据库上下文。

builder.Services.AddDbContext<CoreMvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("CoreMvcMovieContext") ?? throw new InvalidOperationException("Connection string 'CoreMvcMovieContext' not found.")));

在MoviesController控制器中可以看到构造函数通过依赖关系注入将数据库上下文注入到了控制器中

        private readonly CoreMvcMovieContext _context;

        public MoviesController(CoreMvcMovieContext context)
        {
            _context = context;
        }

 

appsettings.json 文件自动添加了数据库连接字符串

  "ConnectionStrings": {
    "CoreMvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=;Trusted_Connection=True;MultipleActiveResultSets=true"
  }

data文件夹下自动新增了数据库上下文类

 

初始迁移

工具->Nuget包管理器->包管理器控制台

在控制台输入命令

Add-Migration InitialCreate

Update-Database

正常情况下,会生成一个Movie的表,需要注意的是,由于我们自动生成的数据库连接串没有指定数据库名,因此会生成到系统数据库master下,可以在视图中打开sqlserver对象资源管理器看一下。

 我们手动在这个表里加2条数据,生成项目,访问/Movies/Index控制器

 

@model指令和强类型模型

我们点击列表的details链接,跳转到details视图。

打开项目中Views/Movies/Details.cshtml文件,在头部可以看到

@model CoreMvcMovie.Models.Movie

页面上就可以使用这个指令来访问这个movie的属性了。

@Model.Title

注意这里是@Model,首字母是大写的,头部的是@model,是小写的。