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

yizhihongxing

随着技术的发展,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/p/17354439.html

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

(0)
上一篇 2023年5月5日
下一篇 2023年5月5日

相关文章

  • C#去除字符串中的反斜杠实例(推荐)

    C#去除字符串中的反斜杠实例(推荐) 问题描述 在C#中,有时候需要将一个字符串中的反斜杠去掉,以便能够正确地使用字符串,比如在Json字符串中,需要将反斜杠去掉。本教程将介绍如何在C#中去除字符串中的反斜杠。 实现方式 方法一:使用Replace方法 可以使用String类的Replace方法,将反斜杠替换为空字符串即可。示例如下: string str …

    C# 2023年6月8日
    00
  • asp.net生成缩略图实现代码

    生成缩略图是一个常见的需求,在asp.net中实现也比较简单。可以通过使用System.Drawing命名空间下的Image类来完成生成缩略图的功能。下面分步骤详细讲解如何实现: 步骤一:引用命名空间 using System.Drawing; using System.Drawing.Imaging; 步骤二:加载图片 首先需要对要生成缩略图的图片进行加载…

    C# 2023年5月31日
    00
  • c# .net 生成图片验证码的代码

    为了在C# .NET中生成图片验证码,我们可以遵循以下步骤: 步骤1:安装NuGet包 我们需要安装 ZXing 和 System.Drawing.Common 两个NuGet包,以便在C#代码中引用。 运行以下命令安装: Install-Package ZXing -Version 1.1.0 Install-Package System.Drawing.…

    C# 2023年5月31日
    00
  • 在.NET中使用Newtonsoft.Json转换,读取,写入的方法介绍

    为了让大家更好地了解在.NET中如何使用Newtonsoft.Json转换、读取和写入JSON数据,下面为大家详细介绍这方面的攻略: 简介 Newtonsoft.Json是.NET框架下一个非常流行的用于JSON序列化和反序列化的库。它可以让我们方便地将.NET对象序列化成JSON格式的字符串,以及将JSON格式的字符串反序列化成.NET对象。在.NET开发…

    C# 2023年5月31日
    00
  • asp.net高效替换大容量字符实现代码

    下面是“asp.net高效替换大容量字符实现代码”的完整攻略: 问题描述 当需要对一个包含大量字符的字符串进行替换时,常规的字符串替换方式很容易导致性能问题,进而影响网站的响应速度。此时,需要考虑如何高效地替换大容量的字符,以提高网站的性能。 解决方案 一种高效替换大容量字符的解决方案就是使用 StringBuilder 类型。StringBuilder 提…

    C# 2023年5月31日
    00
  • C#图片查看器实现方法

    C#图片查看器实现方法攻略 如果你想在C#中实现一个图片查看器,可以按照以下步骤进行。在这个教程中,我们将使用WinForm来实现这个功能,而不是使用WPF、ASP.NET或其他技术。同时,我们也将使用C#标准库中的一些功能,例如Image类和PictureBox控件。 步骤一:创建WinForm窗体 我们可以使用Visual Studio来创建一个新的Wi…

    C# 2023年6月1日
    00
  • jQuery+Asp.Net实现省市二级联动功能的方法

    下面是关于“jQuery+Asp.Net实现省市二级联动功能的方法”的完整攻略: 一、前置知识 在实现该功能前,你需要具备以下前置知识: HTML、CSS基本语法 jQuery基本用法 Asp.Net基本知识 二、具体实现步骤 1. 在HTML页面中添加表单元素 首先,在HTML页面中添加两个下拉框,分别用来显示“省份”和“城市”。HTML代码如下: &lt…

    C# 2023年5月31日
    00
  • C#中委托用法实例分析

    C#中委托用法实例分析 什么是委托 在C#中,委托是一种类型,它允许我们将方法作为参数传递给其他方法或将方法作为返回值返回给调用方。委托定义时需要指定该委托可以引用的方法的签名。委托的实例可以对一个或多个方法进行引用,并且在执行时它可以将所引用的方法执行。 委托的定义与使用 委托定义的语法格式如下: delegate <返回类型> <委托名…

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