基于.Net Core Web MVC的图书查询系统——第四章,添加模型并使用EF Core生成基架&自动生成控制器和视图

基于.Net Core Web MVC的图书查询系统



前言

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数据库的内容了。如果您觉得这篇文章对您有帮助,还请不要吝啬您手里的赞。同样,如果您觉得这篇文章有误,请您指正批评,作者将感激不尽!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在ASP.NET Core MVC使用LINQ访问MSSQL数据库的步骤如下: 1. 安装Entity Framework CoreEF Core)NuGet包。打开Package Manager Console,运行以下命令: ``` Install-Package Microsoft.EntityFrameworkCore.SqlServer ``` 2. 创建一个模型类来表示数据库中的表。例如,如果你要访问名为“Customers”的表,可以创建一个名为“Customer”的类,如下所示: ```csharp public class Customer { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } } ``` 3. 创建一个继承自DbContext的数据库上下文类。在此类中,你可以定义要访问的表以及数据库连接字符串。例如: ```csharp public class MyDbContext : DbContext { public DbSet<Customer> Customers { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=MyDatabase;Integrated Security=True"); } } ``` 4. 在控制器类中创建一个MyDbContext实例,并使用LINQ查询来访问数据库。例如: ```csharp public class CustomersController : Controller { private readonly MyDbContext _context; public CustomersController(MyDbContext context) { _context = context; } public IActionResult Index() { var customers = from c in _context.Customers where c.Email.Contains("@") orderby c.Name select c; return View(customers.ToList()); } } ``` 在这个例子中,我们使用LINQ查询来从“Customers”表中选择所有包含“@”符号的客户的名称和电子邮件,并按名称排序。然后我们将结果传递给视图。 这就是在ASP.NET Core MVC使用LINQ访问MSSQL数据库的基本步骤。需要注意的是,这只是一个简单的示例,实际上你可能需要更复杂的查询,例如连接多个表或使用分组和聚合函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jumul

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值