基于.Net Core Web MVC的图书查询系统
- 第一章,.Net Core Web MVC配置身份验证和注册登录功能并修改默认页面
- 第二章,.Net Core Web MVC配置邮件发送服务
- 第三章,在.Net Core Web MVC中使用Sqlite数据库
- 第四章,添加模型并使用EF Core生成基架&自动生成控制器和视图
- 第五章,条件查询的设计与实现
第四章,添加模型并使用EF Core生成基架
前言
EF Core 可真是一个神奇的工具,它既可以通过模型来建立数据库,并生成简单的增删改查页面和控制器,也可以通过数据库来建立模型。重要的是不仅仅局限于一种数据库,应用范围广。
这篇文章中,将添加主要模型并通过EF Core来生成这些模型的控制器和页面。
一、EF Core是什么?
EF Core 是一个 O/RM(Object Relational Mapping)对象关系映射 框架,它也提供了对数据增删改查的基础封装,提供了Code First 的开发,它也有批量增删的功能扩展;
作者把它理解为一种提高开发效率的工具,可以通过它快速生成增删改查功能,自己再在其基础上修改能省很多事儿。
二、添加图书模型
在Models文件夹下新建Book.cs文件并使用以下代码更新文件:
using System;
using System.ComponentModel.DataAnnotations;
namespace 图书查询系统.Models
{
public enum bookType
{
哲学,
政治,
历史,
地理,
艺术,
天文,
文学,
交通运输,
生物医疗,
农业,
自然科学
}
public class Book
{
//主键,如果需要自定义主键可以像这样
//[Key]
//public Guid BookID { get; set; }
public int ID { get; set; }
[RegularExpression(@"^[^\s]*$", ErrorMessage = "请输入汉字、字母或数字")]//通过正则表达式设置数据合法性的规则,如果验证不合法就提示后面的ErrorMessage
[StringLength(20, MinimumLength = 1, ErrorMessage = "{0} 长度必须在 {2} 到 {1} 之间.")]
[Display(Name = "书名")]//设置模型属性的显示名称
public string BookName { get; set; }
[RegularExpression(@"^[^\s]*$", ErrorMessage = "请输入汉字、字母或数字")]
[StringLength(20, MinimumLength = 1, ErrorMessage = "{0} 长度必须在 {2} 到 {1} 之间.")]
[Display(Name = "作者")]
public string Author { get; set; }
[Display(Name = "图书类别")]
public bookType BookType { get; set; }
[DataType(DataType.Date)]
[Display(Name = "出版日期")]
public DateTime DateOfPublication { get; set; }
[RegularExpression(@"^[^\s]*$", ErrorMessage = "请输入汉字、字母或数字")]
[StringLength(20, ErrorMessage = "{0} 长度不得大于 {1}.")]
[Display(Name = "出版社")]
public string Press { get; set; }
[RegularExpression(@"^[^\s]*$", ErrorMessage = "请输入汉字、字母或数字")]
[StringLength(300, MinimumLength = 10, ErrorMessage = "{0} 长度必须在 {2} 到 {1} 之间.")]
[Display(Name = "简介")]
public string Introduction { get; set; }
}
}
三、使用EF Core生成基架
在“解决方案资源管理器”中,右键单击 Controllers 文件夹,然后选择“添加”>“新搭建基架的项目”。
在“添加基架”对话框中:
选择 视图使用 Entity Framework 的 MVC 控制器。
单击 添加。 随即将显示“使用 Entity Framework 添加包含视图的 MVC 控制器”对话框:
点击添加,等待生成控制器和razor页面,如果生成失败可以检查一下是不是Nuge包的版本不一致造成的。
生成成功后可以看到多出了模型对应的控制器和页面
Create是创建图书,Delete是删除指定图书,Details是查看指定图书的详细信息,Edit是修改指定图书,Index是查看所有图书的视图,相当于一个列表。这样相当于增删改查的功能都给我们生成出来了。
四、同上述方法添加其他模型
作者另外添加了公告功能、收藏功能、还有一个简单的权限管理功能。前两个功能也是像上面一样添加完模型后生成基架,其中权限管理功能改动较大,不适合使用基架。会在后续章节中详细写权限管理功能。
附三个模型代码,可根据自己的需要来修改。
公告的模型
using System;
using System.ComponentModel.DataAnnotations;
namespace 图书查询系统.Models
{
//公告类
public class Announcement
{
public int ID { get; set; }
[Required]
[StringLength(30, MinimumLength = 2)]
[Display(Name = "公告标题")]
public string Name { get; set; }//公告标题
[DataType(DataType.Date)]
[Display(Name = "发布时间")]
public DateTime Time { get; set; }//发布时间
[Display(Name = "公告内容")]
public string Content { get; set; }//公告内容
}
}
收藏功能的模型
using System;
using System.ComponentModel.DataAnnotations;
namespace 图书查询系统.Models
{
public class Collection
{
[Key]
public Guid ID { get; set; }//主键
public string UserID { get; set; }//使用的用户类是IdentityUser,这里对应的是IdentityUser中的主键
public int CaseID { get; set; }//图书类的主键
}
}
权限管理功能的模型
using Microsoft.AspNetCore.Identity;
namespace 图书查询系统.Models
{
public class UserWithRoles : IdentityUser
{
public string RoleType { get; set; }
}
public class ManageUsersViewModel
{
public IdentityUser[] Root { get; set; }
public IdentityUser[] Admin { get; set; }
public IdentityUser[] Everyone { get; set; }
}
}
五、更新数据库
从“工具”菜单中,选择“NuGet 包管理器”>“包管理器控制台”(PMC)。
在 PMC 中,输入以下命令:(如果已经有迁移记录需要先将旧的迁移记录删掉,第一条指令才不会执行失败,要不然将InitialCreate改个其他名字也可以~)
Add-Migration InitialCreate
Update-Database
六、在主页添加新页面的入口链接
在Views/Home/Index.cshtml文件中添加一个a标签就可以了
<a class="navbar-brand" asp-area="" asp-controller="Books" asp-action="Index">图书查询系统</a>
如图:
这样就可以访问到刚才添加的内容了。
生成后的页面可能会出现下面这种情况~
我们会发现图书类别选择不了数据,这是由于视图没有绑定枚举类造成的,下面是关于select标签绑定枚举类型的方法
总结
本文主要记录了通过模型快速添加基架,自动生成相应的控制器和页面的内容。在后续章节中将会先实现图书检索功能再实现收藏功能。
以上就是关于.Net Core Web MVC中使用Sqlite数据库的内容了。如果您觉得这篇文章对您有帮助,还请不要吝啬您手里的赞。同样,如果您觉得这篇文章有误,请您指正批评,作者将感激不尽!