ASP.NET Core MVC 从入门到精通之数据库|世界视讯
2023-04-27 15:30:45 来源:博客园
随着技术的发展,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(DbContextOptionsoptions) 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
78 9
10 18 19 @for (var i = 0; i < movies.Count; i++)20 {21 var movie = movies[i];22序号 11电影名称 12类型 13主演 14上映时间 15票价 16功能 1723 31 }32@movie.Id 24@movie.Name 25@movie.Genre 26@movie.LeadingRole 27@movie.ReleaseDate 28@movie.Price 29编辑 | 删除 30
运行测试
经过上述步骤,程序已经搭建完成,运行程序并输入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从入门到精通之数据库的全部内容,旨在抛砖引玉,一起学习,共同进步。
关键词:
为你推荐
陕西两万五千吨市政桥梁完成“转身”
兰州40家A级旅游景区暂时关闭 开放时间暂定
北京丰台初步排查确诊病例密接、次密接258人 组织3万余
四川95岁战斗英雄何开仲有个心愿:想见见山东老战友
增产快!电力生产加速 能源供应偏紧将得到缓解
夏粮和早稻实现双增产 前三季度农林牧渔业增加值同比增
云南瑞丽江桥“守门员”:疫情防控不漏一人
“久病床前真孝子” 浙江男子照顾瘫痪母亲十载
黑龙江:儿童福利机构养育儿童保障标准提至1750元
山西新绛南关村民:因洪水离开家的日子
“十年磨一剑” 黑色矸石山终闻花果香
国家一级保护动物猎隼受伤 内蒙古警方送医救治
一罪犯强行脱逃下落不明 吉林省吉林监狱发布悬赏通告
涉案金额逾3000万 广西一“洗钱”团伙受审
青藏高原有雨雪天气 西南地区江南华南等地有明显降雨
湖南长沙县发现1例外省输入新冠肺炎确诊病例
青海互助:打造全国最大高原草莓种苗繁育中心
照片修复师:每修复一张照片越珍惜与亲人相处的时光
贵州率先在中国实现地质矿产勘查全过程数字化
浙江岱山通报一船沉没 2人获救11人失联
推荐内容
- 陕西两万五千吨市政桥梁完成“转身”
- 河北邯郸发生天然气泄漏事故致3人死亡
- 兰州40家A级旅游景区暂时关闭 开放时间暂定
- 湖北警方打掉两跨省“跑分”洗钱犯罪团伙
- 新冠肺炎疫情下如何保护孩子?张文宏建议设儿童专
- 海南儋州出现1例治愈后的境外输入病例复阳人员
- 男童脊柱侧弯压迫心肺 医生耗时7小时矫正
- 宁夏将开展18岁以上重点人群加强免疫接种工作
- 北京新增1例京外关联本地确诊病例 病例所在街道
- 北京丰台初步排查确诊病例密接、次密接258人 组
- 四川95岁战斗英雄何开仲有个心愿:想见见山东老战
- 增产快!电力生产加速 能源供应偏紧将得到缓解
- 夏粮和早稻实现双增产 前三季度农林牧渔业增加值
- 云南瑞丽江桥“守门员”:疫情防控不漏一人
- 宁夏吴忠核酸阳性者已确诊
- 宁夏吴忠市发现一例外省来吴核酸检测阳性人员
- “久病床前真孝子” 浙江男子照顾瘫痪母亲十载
- 内蒙古额济纳旗5名确诊病例行动轨迹:在同一饭店
- 北京疾控:近期去过这些地方的相关人员请主动报备
- 北京新增1例京外关联输入本地确诊病例
- 增强为民服务能力——做群众最盼事 解群众最难题
- 魏复盛:干一些平凡的实事
- 中缅边境畹町海关查获涉嫌走私海马干4381尾
- 黑龙江:儿童福利机构养育儿童保障标准提至1750元
- 山西新绛南关村民:因洪水离开家的日子
- “十年磨一剑” 黑色矸石山终闻花果香
- 适老化的游戏准备好了吗?电子游戏别忽视老年人
- 国家一级保护动物猎隼受伤 内蒙古警方送医救治
- 西安鄠邑发布2名密接者活动轨迹
- 宁夏吴忠发现一例外省来吴核酸检测阳性人员
- 上海籍阳性夫妻内蒙古行程涉及3个景区、1个民宿、
- 内蒙古额济纳旗启动IV级应急响应 排查出密接者197人
- 内蒙古二连浩特市两地调整为中风险地区
- 泥若二审宣判来了 知名游戏主播山泥若被判刑3年
- 河北邯郸发生天然气泄漏 3人窒息死亡
- 北京丰台报告1例甘肃来京人员新冠病毒核酸检测阳性
- 内蒙古二连浩特两个社区调整为中风险地区
- 一罪犯强行脱逃下落不明 吉林省吉林监狱发布悬赏
- 兰州6人核酸检测呈阳性 主城区局地调整为中风险区
- 涉案金额逾3000万 广西一“洗钱”团伙受审
产业
-
ASP.NET Core MVC 从入门到精通之数据库|世界视讯
2023-04-27
-
仅重998g!LG推出Gram SuperSlim笔电:10.9mm纤薄机身
2023-04-27
-
视点!迈为股份(300751.SZ):目前公司0BB设备已在客户端测试
2023-04-27
-
关注:国王球迷身穿“追梦是个碧池”T恤 追梦赛后告诉记者他看到了
2023-04-27
-
今日热讯:坚果N1:3999元就能买到的三色激光投影仪,到底有多强?
2023-04-27
油气
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
经济
-
2022年7月,滴滴全球股份有限公司(在开曼群岛注册成立,于美国纽约证券交易所上市)被罚80 26亿元。这不仅是中国《个人信息保护法》颁布以来
-
中新网通辽10月18日电 (记者 张林虎)18日,记者从内蒙古自治区通辽市奈曼旗公安局获悉,国家一级保护动物--梅花鹿误入当地村民羊群,
-
中新网杭州10月18日电 (王题题 胡燕婕)云天收夏色,浅秋正渐浓。10月18日,浙江杭州市西湖游船有限公司推出的惠民多站点“西湖环湖游
-
中新网福州10月18日电 (记者 龙敏 王东明)福州市晋安区官方18日晚间通报,18日14时47分,晋安区岳峰镇化工路爱摩轮商业广场项目摩天
-
中新网兰州10月18日电 (闫姣 艾庆龙 吉翔)“红山白土头,黄河向西流。”不少人疑问,天下黄河向东流,为何甘肃永靖县这段黄河却向西