拉度 发表于 2023-4-27 17:03:57

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与数据库等相关内容,仅供学习分享使用。

 
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,如下所示:

通过数据库右键进行创建数据库,创建表的语句如下所示:
1 USE
2 GO
3
4 /****** Object:Table .    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 .(
15    IDENTITY(1,1) NOT NULL,
16    (200) NULL,
17    NULL,
18    (100) NULL,
19    (100) NULL,
20    NULL,
21    NULL,
22    (50) NULL,
23    NULL,
24    (50) NULL,
25CONSTRAINT PRIMARY KEY CLUSTERED
26 (
27    ASC
28 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON
29 ) ON
30
31 GO
32
33 SET ANSI_PADDING OFF
34 GO 
构造测试数据

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

 
 
创建数据实体

 
数据库和数据表创建成功后,需要需要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,如下所示:

 
配置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;
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 target="_blank" href="https://www.cnblogs.com/Movie/Edit/@movie.Id">编辑</a> | <a target="_blank" href="https://www.cnblogs.com/Movie/Delete/@movie.Id">删除</a></td>
30   </tr>
31 }
32 </table> 
运行测试

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

 
参考文章

 
本文主要参考文章如下:
数据库故障排查: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
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: ASP.NET Core MVC 从入门到精通之数据库