最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

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 [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 GO10 11 SET ANSI_PADDING ON12 GO13 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] ASC28 )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 GO32 33 SET ANSI_PADDING OFF34 GO

构造测试数据

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

创建数据实体

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

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

创建业务模型

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

1 namespace DemoCoreMVC.Models 2 { 3     public class Movie 4     { 5         ///  6         /// 主键唯一标识 7         ///  8         public long Id { get; set; } 9 10         /// 11         /// 电影名称12         /// 13         public string Name { get; set; }14 15         /// 16         /// 发行时间17         /// 18         public DateTime ReleaseDate { get; set; }19 20         /// 21         /// 主角22         /// 23         public string LeadingRole { get; set; }24 25         /// 26         /// 电影类型27         /// 28         public string Genre { get; set; }29 30         /// 31         /// 票价格32         /// 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 options) 9             : base(options)10         {11         }12 13         public DbSet Movie { get; set; }14 15         protected override void OnModelCreating(ModelBuilder modelBuilder)16         {17             base.OnModelCreating(modelBuilder);18             modelBuilder.Entity().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(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; 4 } 5  6 

Index

7 8 9 10 11 12 13 14 15 16 17 18 19 @for (var i = 0; i < movies.Count; i++)20 {21 var movie = movies[i];22 23 24 25 26 27 28 29 30 31 }32
序号电影名称类型主演上映时间票价功能
@movie.Id@movie.Name@movie.Genre@movie.LeadingRole@movie.ReleaseDate@movie.Price编辑 | 删除

运行测试

经过上述步骤,程序已经搭建完成,运行程序并输入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从入门到精通之数据库的全部内容,旨在抛砖引玉,一起学习,共同进步。

关键词: