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/archive/2023/04/27/17354439.html

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

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

相关文章

  • ASP.NET(VB)写的后台发送短信实现代码

    下面我就为您详细讲解ASP.NET (VB) 写的后台发送短信实现代码的完整攻略。 第一步:获取短信API 要发送短信,我们需要使用短信API。在国内,可以使用阿里云、腾讯云等云服务商提供的短信API。获取到短信API之后,我们需要在代码中引入相应的SDK,并按照API文档进行配置和调用。 第二步:编写发送短信的代码 实现方式一:使用SDK发送短信 以阿里云…

    C# 2023年5月31日
    00
  • C#三种方法获取文件的Content-Type(MIME Type)

    首先,我们需要理解什么是 Content-Type(MIME Type)。Content-Type(MIME Type) 是 HTTP 协议头中一部分,用于描述资源的类型。常见的 MIME类型包括:text/html、application/json、image/png 等等。 在 C# 中获取文件的 Content-Type(MIME Type) 有三种方…

    C# 2023年5月31日
    00
  • C#根据身份证号码判断出生日期和性别

    C# 根据身份证号码判断出生日期和性别 步骤1:获取身份证号码的输入 在 C# 中,我们可以通过 Console.ReadLine() 方法获取用户输入的身份证号码。示例代码如下: Console.WriteLine("请输入身份证号码:"); string idCard = Console.ReadLine(); 步骤2:校验身份证号码…

    C# 2023年6月1日
    00
  • Unity Shader片段着色器使用基础详解

    Unity Shader片段着色器使用基础详解 Unity中的Shader(着色器)用于控制游戏对象的渲染方式,让它们变得更加美观、细致。Shader分为顶点着色器和片段着色器,这篇攻略主要介绍Unity中片段着色器的使用基础,可以帮助开发者更加细致地控制对象的渲染方式。 Shader基础知识 在进入片段着色器的详细使用说明前,我们先来了解一些Shader的…

    C# 2023年6月3日
    00
  • Netcore Webapi返回数据的三种方式示例

    .Net Core WebAPI返回数据的三种方式示例 在.Net Core WebAPI中,有多种方式可以返回数据给客户端。本攻略将详细介绍.Net Core WebAPI返回数据的三种方式,并提供两个示例说明。 1. 返回字符串 在.Net Core WebAPI中,可以使用字符串来返回数据给客户端。可以按照以下步骤操作: 在Controller类中,添…

    C# 2023年5月16日
    00
  • c#网站WebConfig中域名引用示例介绍

    下面是“c#网站WebConfig中域名引用示例介绍”的完整攻略: 1. 简介 WebConfig是c#网站的配置文件,c#网站是一种基于.NET框架的网站开发语言。在WebConfig中,我们可以使用域名引用到其他网站或资源。 2. 域名引用的语法 在WebConfig中进行域名引用的语法格式如下: <configuration> <sy…

    C# 2023年5月31日
    00
  • c#下将.cs文件编译成dll

    将C#源代码编译成.dll文件,一般可以通过Visual Studio或者命令行来完成。 使用Visual Studio编译 如果使用Visual Studio开发C#程序,可以直接编译成.dll文件。 打开Visual Studio,创建新的C#项目。 在项目中添加需要编译成.dll文件的.cs源文件。 右键点击源文件,选择“生成”,或者使用快捷键 Ctr…

    C# 2023年6月1日
    00
  • C# Path.GetTempFileName()方法: 获取一个唯一的临时文件名

    Path.GetTempFileName()方法作用及使用方法 C#的Path.GetTempFileName()方法可以返回一个唯一的临时文件名,并创建该文件。此临时文件的路径和文件名是在指定目录(如:%temp%)中由系统自动生成的,以确保每次调用时都必须生成唯一的文件名。 使用方法 Path.GetTempFileName()方法的使用非常简单,只需直…

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