上一篇mvc的示例里,我们貌似没有看到数据模型的使用。那是因为数据模型的知识点较多,所以小编需要单独用一篇文章来介绍。首先我们要先理解什么是数据模型,拿现实中的工厂来比喻的话,假设我们要生成完成兔子,那么我们就要先设计一个兔子的模型,然后我们就可以通过兔子的模型来生成玩具了。c#里的数据模型就是通过定义数据的属性,通过这些自定义的属性来描述各种同类型的数据。先看一段示例
using System.ComponentModel.DataAnnotations; namespace WebApplication4.Models //命名空间 { public class Article { [Key] //特性 id为主键 public int Id { get; set; } [MaxLength(100, ErrorMessage = "文章字数超出")] //特性:规定最大字符不得超过100 [Required(ErrorMessage = "文章标题不能为空")] //特性:规定不能为空 public string Title { get; set; } [MinLength(20, ErrorMessage = "内容不能少于20个字符")] [Required(ErrorMessage = "内容不可为空")] public string Content { get; set; } } }
上面这个模型取名为Article.cs。上方括号[]里的是叫特性 比如第一个[Key]它规定ID为该模型的主键。任何作用于数据库的模型都需要一个主键,默认为id。所以上面的[key]其实可以直接删除掉。 public int Id { get; set; } 整段代码我们这里讲解一下,
public 代表公共的,就是大家都可以访问。可以通过Article.id 就可以访问到具体的数据。但是如果我们要是定义为private 那么就代表私有的,只能在Article内部才能访问到。
int id 表示这个是一个int数据 名称为id
{ get; set; }这个是一组语法糖,作用就是字面意思,取得数据,给与数据。它是一组自动完成的代码。你也可以手动定义。代码如下
private string _icon; public dynamic Icon { get { return _icon; } set { _icon = value; } }
上方的icon属性,如果我们要手写get set 那么首先需要一个私有字段private string _icon Icon用来设置和获取_icon字段的数据。{ get; set; }这个语法糖实际也有一个私有字段,只是C#把我们自动设置好了,如果通过反编译我们是可以找到这个私有字段的。
第一个数据模型的啥用
如果我们还保留了上个文章里的项目案例,那么我们开始使用数据模型,首先打开Controllers-HomeController.cs 引入数据模型。因为Article.cs位于命名空间Models下。所以我们只需要引入命名空间using WebApplication4.Models,就可以引入了。
整个HomeController的代码如下
using Microsoft.AspNetCore.Mvc;//引入mvc using WebApplication4.Models; namespace WebApplication4.Controllers { public class HomeController : Controller //把HomeController的信息注入到 mvc.Controller, { public HomeController() //构造函数 { } [Route("")] //设置路由 这里设置为网站的根目录 public IActionResult Index() //返回IActionResult数据 { Article article = new () //定义变量article 数据类型为模型Article { Id=3, Title="我是第一个数据模型", Content="我是这个模型的内容" }; return View(article); //把变量article放入参数里,那么就可以在index.cshtml调用了 } } }
上方通过数据模型Article定义了第一个变量 article,然后把它传递给了视图 index.cshtml。index.cshtml代码如下
@model WebApplication4.Models.Article;@Model.Title@Model.Content
@model WebApplication4.Models.Article; 定义了model为Article数据类型,然后就可以通过Model.Title访问传递过来的参数article里的title属性了。通过浏览器运行项目后实际效果如下图
最后总结
数据模型在MVC里很大一部分都是应用于ef code,用来获取数据库里的数据。所以咱们可以理解为数据库在c#里的映射。ef code通过数据模型可以达到创建,更新,管理数据库等诸多功能,让我们把精力最大化的放到c#源码里,而不需要单独的于数据库打交道。