当前位置:   article > 正文

ASP.NET Core MVC 从入门到精通之数据库_.net core 操作数据库

.net core 操作数据库

随着技术的发展,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. /****** Object: Table [dbo].[Movie] Script Date: 2023/4/25 23:53:21 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. SET ANSI_PADDING ON
  9. GO
  10. CREATE TABLE [dbo].[Movie](
  11. [Id] [bigint] IDENTITY(1,1) NOT NULL,
  12. [Name] [varchar](200) NULL,
  13. [ReleaseDate] [datetime] NULL,
  14. [LeadingRole] [varchar](100) NULL,
  15. [Genre] [varchar](100) NULL,
  16. [Price] [money] NULL,
  17. [CreateTime] [datetime] NULL,
  18. [CreateUser] [varchar](50) NULL,
  19. [LastEditTime] [datetime] NULL,
  20. [LastEditUser] [varchar](50) NULL,
  21. CONSTRAINT [PK_Movie] PRIMARY KEY CLUSTERED
  22. (
  23. [Id] ASC
  24. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  25. ) ON [PRIMARY]
  26. GO
  27. SET ANSI_PADDING OFF
  28. 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. /// <summary>
  13. /// 电影名称
  14. /// </summary>
  15. public string Name { get; set; }
  16. /// <summary>
  17. /// 发行时间
  18. /// </summary>
  19. public DateTime ReleaseDate { get; set; }
  20. /// <summary>
  21. /// 主角
  22. /// </summary>
  23. public string LeadingRole { get; set; }
  24. /// <summary>
  25. /// 电影类型
  26. /// </summary>
  27. public string Genre { get; set; }
  28. /// <summary>
  29. /// 票价格
  30. /// </summary>
  31. public decimal Price { get; set; }
  32. /// <summary>
  33. /// 创建时间
  34. /// </summary>
  35. public DateTime CreateTime { get; set; }
  36. /// <summary>
  37. /// 录入人员
  38. /// </summary>
  39. public string CreateUser { get; set; }
  40. /// <summary>
  41. /// 最后编辑时间
  42. /// </summary>
  43. public DateTime LastEditTime { get; set; }
  44. /// <summary>
  45. /// 最后编辑人员
  46. /// </summary>
  47. public string LastEditUser { get; set; }
  48. }
  49. }

创建业务模型

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

  1. namespace DemoCoreMVC.Models
  2. {
  3. public class Movie
  4. {
  5. /// <summary>
  6. /// 主键唯一标识
  7. /// </summary>
  8. public long Id { get; set; }
  9. /// <summary>
  10. /// 电影名称
  11. /// </summary>
  12. public string Name { get; set; }
  13. /// <summary>
  14. /// 发行时间
  15. /// </summary>
  16. public DateTime ReleaseDate { get; set; }
  17. /// <summary>
  18. /// 主角
  19. /// </summary>
  20. public string LeadingRole { get; set; }
  21. /// <summary>
  22. /// 电影类型
  23. /// </summary>
  24. public string Genre { get; set; }
  25. /// <summary>
  26. /// 票价格
  27. /// </summary>
  28. public decimal Price { get; set; }
  29. }
  30. }

安装EntityFrameworkCore

在ASP.NET Core MVC项目中,我们使用EntityFrameworkCore操作数据库,需要安装依赖包,通过Nuget包管理器进行安装,目前版本为7.0.5,如下所示:

 

配置SQL Server连接字符串

在appsettings.json中,增加数据库连接字符串,配置ConnectionStrings节点,如下所示:

  1. {
  2. "ConnectionStrings": {
  3. "Default": "Server=数据库url;Database=MovieDb;User Id=数据库账号;Password=数据库密码;Trusted_Connection=True;;TrustServerCertificate=true;MultipleActiveResultSets=true"
  4. },
  5. "Logging": {
  6. "LogLevel": {
  7. "Default": "Information",
  8. "Microsoft.AspNetCore": "Warning"
  9. }
  10. },
  11. "AllowedHosts": "*"
  12. }

创建DbContext

EntityFrameCore通过DbContext操作数据,所以需要创建属于整个项目的数据上下文,并继承于DbContext,如下所示:

  1. using DemoCoreMVC.Entities;
  2. using Microsoft.EntityFrameworkCore;
  3. namespace DemoCoreMVC
  4. {
  5. public class MovieDbContext:DbContext
  6. {
  7. public MovieDbContext(DbContextOptions<MovieDbContext> options)
  8. : base(options)
  9. {
  10. }
  11. public DbSet<MovieEntity> Movie { get; set; }
  12. protected override void OnModelCreating(ModelBuilder modelBuilder)
  13. {
  14. base.OnModelCreating(modelBuilder);
  15. modelBuilder.Entity<MovieEntity>().ToTable("Movie");
  16. }
  17. }
  18. }

注意:在OnModelCreating中,将实体和数据表进行映射。

注入EntityFrameworkCore框架

在Program.cs中,注入框架,并将appSetting.json配置的数据库连接字符串传递进去,如下所示:

  1. using DemoCoreMVC;
  2. using Microsoft.EntityFrameworkCore;
  3. var builder = WebApplication.CreateBuilder();
  4. //注入数据库框架
  5. builder.Services.AddDbContext<MovieDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
  6. // Add services to the container.
  7. builder.Services.AddControllersWithViews();
  8. var app = builder.Build();
  9. // Configure the HTTP request pipeline.
  10. if (!app.Environment.IsDevelopment())
  11. {
  12. app.UseExceptionHandler("/Home/Error");
  13. // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
  14. app.UseHsts();
  15. }
  16. app.UseHttpsRedirection();
  17. app.UseStaticFiles();
  18. app.UseRouting();
  19. app.UseAuthorization();
  20. app.MapControllerRoute(
  21. name: "default",
  22. pattern: "{controller=Home}/{action=Index}/{id?}");
  23. app.Run();

 

创建控制器MovieController

在项目中,创建MovieController,在Index方法中查询电影信息,并将数据传递给视图,如下所示:

  1. using DemoCoreMVC.Models;
  2. using Microsoft.AspNetCore.Mvc;
  3. namespace DemoCoreMVC.Controllers
  4. {
  5. public class MovieController : Controller
  6. {
  7. private MovieDbContext movieDb;
  8. public MovieController(MovieDbContext movieDb)
  9. {
  10. this.movieDb = movieDb;
  11. }
  12. public IActionResult Index()
  13. {
  14. //1.获取数据库实体
  15. var entities = movieDb.Movie.Skip(0).Take(20).ToList();
  16. //2.将实体转换成业务模型
  17. var movies = entities.Select(e => new Movie()
  18. {
  19. Id = e.Id,
  20. Name = e.Name,
  21. Genre = e.Genre,
  22. LeadingRole = e.LeadingRole,
  23. Price = e.Price,
  24. ReleaseDate = e.ReleaseDate,
  25. }).ToList();
  26. ViewData.Add("Movies",movies);
  27. return View();
  28. }
  29. }
  30. }

创建视图Index.cshtml

视图用于显示电影列表,代码如下所示:

  1. @{
  2. ViewData["Title"] = "Index";
  3. var movies = ViewData["Movies"] as List<Movie>;
  4. }
  5. <h1>Index</h1>
  6. <table class="table">
  7. <thead>
  8. <tr>
  9. <td>序号</td>
  10. <td>电影名称</td>
  11. <td>类型</td>
  12. <td>主演</td>
  13. <td>上映时间</td>
  14. <td>票价</td>
  15. <td>功能</td>
  16. </tr>
  17. </thead>
  18. @for (var i = 0; i < movies.Count; i++)
  19. {
  20. var movie = movies[i];
  21. <tr>
  22. <td>@movie.Id</td>
  23. <td>@movie.Name</td>
  24. <td>@movie.Genre</td>
  25. <td>@movie.LeadingRole</td>
  26. <td>@movie.ReleaseDate</td>
  27. <td>@movie.Price</td>
  28. <td><a href="/Movie/Edit/@movie.Id">编辑</a> | <a href="/Movie/Delete/@movie.Id">删除</a></td>
  29. </tr>
  30. }
  31. </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从入门到精通之数据库的全部内容,旨在抛砖引玉,一起学习,共同进步。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/377923
推荐阅读
相关标签
  

闽ICP备14008679号