ASP.NET Core MVC 从入门到精通之数据库

随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步了解ASP.NET Core MVC项目创建,启动运行,以及命名约定,创建控制器,视图,模型,接收参数,传递数据,路由,页面布局,wwwroot和客户端库,Razor语法等内容,今天继续讲解ASP.NET Core MVC 中EnityFrameworkCore数据库等相关内容,仅供学习分享使用。

ASP.NET Core MVC 从入门到精通之数据库

 

EntityFrameworkCore简介

 

Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。

EF Core 可用作对象关系映射程序 (O/RM),这可以实现以下两点:

  • 使 .NET 开发人员能够使用 .NET 对象处理数据库。
  • 无需再像通常那样编写大部分数据访问代码。

 

创建数据库

 

在ASP.NET Core MVC项目中,环境搭建常过有两种模式:Code First和DB First,在本例中主要采用DB First模式,使用的数据库为SQL Server 2012。首先创建数据库,并命名称MovieDB,然后创建数据表Movie,如下所示:

ASP.NET Core MVC 从入门到精通之数据库

通过数据库右键进行创建数据库,创建表的语句如下所示:

 1 USE [MovieDB]
 2 GO
 3 
 4 /****** Object:  Table [dbo].[Movie]    Script Date: 2023/4/25 23:53:21 ******/
 5 SET ANSI_NULLS ON
 6 GO
 7 
 8 SET QUOTED_IDENTIFIER ON
 9 GO
10 
11 SET ANSI_PADDING ON
12 GO
13 
14 CREATE TABLE [dbo].[Movie](
15     [Id] [bigint] IDENTITY(1,1) NOT NULL,
16     [Name] [varchar](200) NULL,
17     [ReleaseDate] [datetime] NULL,
18     [LeadingRole] [varchar](100) NULL,
19     [Genre] [varchar](100) NULL,
20     [Price] [money] NULL,
21     [CreateTime] [datetime] NULL,
22     [CreateUser] [varchar](50) NULL,
23     [LastEditTime] [datetime] NULL,
24     [LastEditUser] [varchar](50) NULL,
25  CONSTRAINT [PK_Movie] PRIMARY KEY CLUSTERED 
26 (
27     [Id] ASC
28 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
29 ) ON [PRIMARY]
30 
31 GO
32 
33 SET ANSI_PADDING OFF
34 GO

 

构造测试数据

 

在测试应用之前,首先在数据表中插入2条测试数据,以便看到效果,如下所示:

ASP.NET Core MVC 从入门到精通之数据库

 

 

创建数据实体

 

数据库和数据表创建成功后,需要需要ASP.NET Core MVC项目中创建与数据表对应的实体类MovieEntity,如下所示:

 1 namespace DemoCoreMVC.Entities
 2 {
 3     /// <summary>
 4     /// 电影实体
 5     /// </summary>
 6     public class MovieEntity
 7     {
 8         /// <summary>
 9         /// 主键唯一标识
10         /// </summary>
11         public long Id { get; set; }
12 
13         /// <summary>
14         /// 电影名称
15         /// </summary>
16         public string Name { get; set; }
17 
18         /// <summary>
19         /// 发行时间
20         /// </summary>
21         public DateTime ReleaseDate { get; set; }
22 
23         /// <summary>
24         /// 主角
25         /// </summary>
26         public string LeadingRole { get; set; }
27 
28         /// <summary>
29         /// 电影类型
30         /// </summary>
31         public string Genre { get; set; }
32 
33         /// <summary>
34         /// 票价格
35         /// </summary>
36         public decimal Price { get; set; }
37 
38         /// <summary>
39         /// 创建时间
40         /// </summary>
41         public DateTime CreateTime { get; set; }
42 
43         /// <summary>
44         /// 录入人员
45         /// </summary>
46         public string CreateUser { get; set; }
47 
48         /// <summary>
49         /// 最后编辑时间
50         /// </summary>
51         public DateTime LastEditTime { get; set; }
52 
53         /// <summary>
54         /// 最后编辑人员
55         /// </summary>
56         public string LastEditUser { get; set; }
57     }
58 }

 

创建业务模型

 

实体用于和数据表进行映射,业务模型用于在控制器和视图之间进行数据的交互,所以为了进行分层和数据隔离,需要创建模块,在本例中模型为Movie,字段名称和Entity保持一致【也可以不一致】。如下所示:

 1 namespace DemoCoreMVC.Models
 2 {
 3     public class Movie
 4     {
 5         /// <summary>
 6         /// 主键唯一标识
 7         /// </summary>
 8         public long Id { get; set; }
 9 
10         /// <summary>
11         /// 电影名称
12         /// </summary>
13         public string Name { get; set; }
14 
15         /// <summary>
16         /// 发行时间
17         /// </summary>
18         public DateTime ReleaseDate { get; set; }
19 
20         /// <summary>
21         /// 主角
22         /// </summary>
23         public string LeadingRole { get; set; }
24 
25         /// <summary>
26         /// 电影类型
27         /// </summary>
28         public string Genre { get; set; }
29 
30         /// <summary>
31         /// 票价格
32         /// </summary>
33         public decimal Price { get; set; }
34 35     }
36 }

 

安装EntityFrameworkCore

 

在ASP.NET Core MVC项目中,我们使用EntityFrameworkCore操作数据库,需要安装依赖包,通过Nuget包管理器进行安装,目前版本为7.0.5,如下所示:

ASP.NET Core MVC 从入门到精通之数据库

 

配置SQL Server连接字符串

 

在appsettings.json中,增加数据库连接字符串,配置ConnectionStrings节点,如下所示:

{
  "ConnectionStrings": {
    "Default": "Server=数据库url;Database=MovieDb;User Id=数据库账号;Password=数据库密码;Trusted_Connection=True;;TrustServerCertificate=true;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

 

创建DbContext

 

EntityFrameCore通过DbContext操作数据,需要创建属于整个项目的数据上下文,并继承于DbContext,如下所示:

 1 using DemoCoreMVC.Entities;
 2 using Microsoft.EntityFrameworkCore;
 3 
 4 namespace DemoCoreMVC
 5 {
 6     public class MovieDbContext:DbContext
 7     {
 8         public MovieDbContext(DbContextOptions<MovieDbContext> options)
 9             : base(options)
10         {
11         }
12 
13         public DbSet<MovieEntity> Movie { get; set; }
14 
15         protected override void OnModelCreating(ModelBuilder modelBuilder)
16         {
17             base.OnModelCreating(modelBuilder);
18             modelBuilder.Entity<MovieEntity>().ToTable("Movie");
19         }
20     }
21 }

注意:在OnModelCreating中,将实体和数据表进行映射。

 

注入EntityFrameworkCore框架

 

在Program.cs中注入框架,并将appSetting.json配置的数据库连接字符串传递进去,如下所示:

 1 using DemoCoreMVC;
 2 using Microsoft.EntityFrameworkCore;
 3 
 4 var builder = WebApplication.CreateBuilder();
 5 
 6 //注入数据库框架
 7 builder.Services.AddDbContext<MovieDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
 8 
 9 // Add services to the container.
10 builder.Services.AddControllersWithViews();
11 var app = builder.Build();
12 
13 // Configure the HTTP request pipeline.
14 if (!app.Environment.IsDevelopment())
15 {
16     app.UseExceptionHandler("/Home/Error");
17     // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
18     app.UseHsts();
19 }
20 app.UseHttpsRedirection();
21 app.UseStaticFiles();
22 app.UseRouting();
23 app.UseAuthorization();
24 app.MapControllerRoute(
25     name: "default",
26     pattern: "{controller=Home}/{action=Index}/{id?}");
27 
28 app.Run();

 

创建控制器MovieController

 

在项目中,创建MovieController,在Index方法中查询电影信息,并将数据传递给视图,如下所示:

 1 using DemoCoreMVC.Models;
 2 using Microsoft.AspNetCore.Mvc;
 3 
 4 namespace DemoCoreMVC.Controllers
 5 {
 6     public class MovieController : Controller
 7     {
 8         private MovieDbContext movieDb;
 9 
10         public MovieController(MovieDbContext movieDb)
11         {
12             this.movieDb = movieDb;
13         }
14 
15         public IActionResult Index()
16         {
17             //1.获取数据库实体
18             var entities = movieDb.Movie.Skip(0).Take(20).ToList();
19             //2.将实体转换成业务模型
20             var movies = entities.Select(e => new Movie()
21             {
22                 Id = e.Id,
23                 Name = e.Name,
24                 Genre = e.Genre,
25                 LeadingRole = e.LeadingRole,
26                 Price = e.Price,
27                 ReleaseDate = e.ReleaseDate,
28             }).ToList();
29             ViewData.Add("Movies",movies);
30             return View();
31         }
32     }
33 }

 

创建视图Index.cshtml

 

视图用于显示电影列表,代码如下所示:

 1 @{
 2     ViewData["Title"] = "Index";
 3     var movies = ViewData["Movies"] as List<Movie>;
 4 }
 5 
 6 <h1>Index</h1>
 7 <table class="table">
 8     <thead>
 9         <tr>
10             <td>序号</td>
11             <td>电影名称</td>
12             <td>类型</td>
13             <td>主演</td>
14             <td>上映时间</td>
15             <td>票价</td>
16             <td>功能</td>
17         </tr>
18     </thead>
19 @for (var i = 0; i < movies.Count; i++)
20     {
21         var movie = movies[i];
22         <tr>
23         <td>@movie.Id</td>
24         <td>@movie.Name</td>
25         <td>@movie.Genre</td>
26         <td>@movie.LeadingRole</td>
27         <td>@movie.ReleaseDate</td>
28         <td>@movie.Price</td>
29         <td><a href="/Movie/Edit/@movie.Id">编辑</a> | <a href="/Movie/Delete/@movie.Id">删除</a></td>
30     </tr>
31 }
32 </table>

 

运行测试

 

经过上述步骤,程序已经搭建完成,运行程序并输入URL:https://localhost:7152/Movie,打开效果如下所示:

ASP.NET Core MVC 从入门到精通之数据库

 

参考文章

 

本文主要参考文章如下:

数据库故障排查:https://learn.microsoft.com/zh-cn/troubleshoot/sql/welcome-sql-server

ASP.NET Core MVC入门之数据库:https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/first-mvc-app/working-with-sql?view=aspnetcore-7.0&tabs=visual-studio

 

以上就是ASP.NET Core MVC从入门到精通之数据库的全部内容,旨在抛砖引玉,一起学习,共同进步。

原文链接:https://www.cnblogs.com/hsiang/archive/2023/04/27/17354439.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET Core MVC 从入门到精通之数据库 - Python技术站

(0)
上一篇 2023年4月27日
下一篇 2023年4月28日

相关文章

  • asp.net C#实现下载文件的六种方法实例

    下面是详细讲解“asp.net C#实现下载文件的六种方法实例”的完整攻略: 1. 使用Response.TransmitFile方法实现下载文件 在ASP.NET中,使用Response对象较常见地实现文件的下载。其中,使用Response.TransmitFile方法可以直接将文件传输出去,下载速度较快。代码如下: protected void BtnD…

    C# 2023年6月1日
    00
  • C#中const,readonly和static关键字的用法介绍

    我来为您讲解一下C#中const,readonly和static关键字的用法介绍,并附上相应的代码示例。 const关键字 在C#中,const关键字用于声明常量。常量是在编译时赋值的,一旦赋值后就不能再更改了。常量的值必须是一个常量表达式,以便在编译时计算其值。 以下是const关键字的用法示例: public class Example { public…

    C# 2023年5月15日
    00
  • asp实现读取数据库输出json代码

    下面是ASP实现读取数据库输出JSON格式的完整攻略。 第一步:连接数据库 首先,我们需要连接数据库。在ASP中,我们可以使用ADODB库来连接数据库。以下是连接字符串的示例代码: Set conn = Server.CreateObject("ADODB.Connection") conn.Open "Provider=Mic…

    C# 2023年5月31日
    00
  • C# 创建控制台应用程序

    C#创建控制台应用程序的完整攻略 在C#中,控制台应用程序是一种常见的应用程序类型,可以在命令行中运行。本文将提供一个完整的C#创建控制台应用程序的攻略,包括创建、编译、运行、调试等操作。 步骤1:创建控制台应用程序 要创建控制台应用程序,可以按照以下步骤操作: 打开Visual Studio。 选择“文件”->“新建”->“项目”。 在“新建项…

    C# 2023年5月15日
    00
  • Jenkins自动部署Net Core过程图解

    Jenkins自动部署Net Core过程图解 Jenkins是一个流行的开源持续集成和持续交付工具,它可以自动化构建、测试和部署软件。在本文中,我们将介绍如何使用Jenkins自动部署.Net Core应用程序。 准备工作 在开始之前,我们需要完成以下准备工作: 安装Jenkins服务器。 安装.Net Core SDK。 在Jenkins服务器上安装.N…

    C# 2023年5月16日
    00
  • Visual C#中如何使用IComparable和IComparer接口

    Visual C# 中使用 IComparable 和 IComparer 接口的主要作用是用于比较数据类型之间的差异,比如对象是否相等等。这两个接口都是用于排序数据类型的,IComparable 是接口用于实现单个数据类型的排序,IComparer 适用于实现对多个数据类型的排序。以下是在 Visual C# 中使用这两个接口的方法: 使用 ICompar…

    C# 2023年6月6日
    00
  • C#获取当前页面的URL示例代码

    下面是C#获取当前页面的URL的完整攻略。 获取当前页面的URL 在C#中,可以使用HttpContext类来获取当前页面的URL。HttpContext类可以访问请求的相关信息,例如它的路径、查询字符串、表单、标头和cookies。 步骤1:导入命名空间 在代码中的第一行,必须包含以下命名空间: using System.Web; 步骤2:获取HttpCo…

    C# 2023年6月7日
    00
  • ASP.NET笔记之 Httphandler的操作详解

    ASP.NET笔记之 Httphandler的操作详解。 什么是Httphandler? Httphandler(处理程序)是ASP.NET处理请求的一个模块,可以实现自定义的请求处理逻辑。Httphandler是ASP.NET MVC中请求和响应的核心组件之一,它可以拦截请求并对其进行某些操作,比如从数据库中读取数据然后呈现在页面上。 创建和注册Httph…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部