翼度科技»论坛 编程开发 .net 查看内容

ASP.NET Core MVC 从入门到精通之数据库

12

主题

12

帖子

36

积分

新手上路

Rank: 1

积分
36
随着技术的发展,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. 1 USE [MovieDB]
  2. 2 GO
  3. 3
  4. 4 /****** Object:  Table [dbo].[Movie]    Script Date: 2023/4/25 23:53:21 ******/
  5. 5 SET ANSI_NULLS ON
  6. 6 GO
  7. 7
  8. 8 SET QUOTED_IDENTIFIER ON
  9. 9 GO
  10. 10
  11. 11 SET ANSI_PADDING ON
  12. 12 GO
  13. 13
  14. 14 CREATE TABLE [dbo].[Movie](
  15. 15     [Id] [bigint] IDENTITY(1,1) NOT NULL,
  16. 16     [Name] [varchar](200) NULL,
  17. 17     [ReleaseDate] [datetime] NULL,
  18. 18     [LeadingRole] [varchar](100) NULL,
  19. 19     [Genre] [varchar](100) NULL,
  20. 20     [Price] [money] NULL,
  21. 21     [CreateTime] [datetime] NULL,
  22. 22     [CreateUser] [varchar](50) NULL,
  23. 23     [LastEditTime] [datetime] NULL,
  24. 24     [LastEditUser] [varchar](50) NULL,
  25. 25  CONSTRAINT [PK_Movie] PRIMARY KEY CLUSTERED
  26. 26 (
  27. 27     [Id] ASC
  28. 28 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  29. 29 ) ON [PRIMARY]
  30. 30
  31. 31 GO
  32. 32
  33. 33 SET ANSI_PADDING OFF
  34. 34 GO
复制代码
 
构造测试数据

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

 
 
创建数据实体

 
数据库和数据表创建成功后,需要需要ASP.NET Core MVC项目中创建与数据表对应的实体类MovieEntity,如下所示:
  1. 1 namespace DemoCoreMVC.Entities
  2. 2 {
  3. 3     /// <summary>
  4. 4     /// 电影实体
  5. 5     /// </summary>
  6. 6     public class MovieEntity
  7. 7     {
  8. 8         /// <summary>
  9. 9         /// 主键唯一标识
  10. 10         /// </summary>
  11. 11         public long Id { get; set; }
  12. 12
  13. 13         /// <summary>
  14. 14         /// 电影名称
  15. 15         /// </summary>
  16. 16         public string Name { get; set; }
  17. 17
  18. 18         /// <summary>
  19. 19         /// 发行时间
  20. 20         /// </summary>
  21. 21         public DateTime ReleaseDate { get; set; }
  22. 22
  23. 23         /// <summary>
  24. 24         /// 主角
  25. 25         /// </summary>
  26. 26         public string LeadingRole { get; set; }
  27. 27
  28. 28         /// <summary>
  29. 29         /// 电影类型
  30. 30         /// </summary>
  31. 31         public string Genre { get; set; }
  32. 32
  33. 33         /// <summary>
  34. 34         /// 票价格
  35. 35         /// </summary>
  36. 36         public decimal Price { get; set; }
  37. 37
  38. 38         /// <summary>
  39. 39         /// 创建时间
  40. 40         /// </summary>
  41. 41         public DateTime CreateTime { get; set; }
  42. 42
  43. 43         /// <summary>
  44. 44         /// 录入人员
  45. 45         /// </summary>
  46. 46         public string CreateUser { get; set; }
  47. 47
  48. 48         /// <summary>
  49. 49         /// 最后编辑时间
  50. 50         /// </summary>
  51. 51         public DateTime LastEditTime { get; set; }
  52. 52
  53. 53         /// <summary>
  54. 54         /// 最后编辑人员
  55. 55         /// </summary>
  56. 56         public string LastEditUser { get; set; }
  57. 57     }
  58. 58 }
复制代码
 
创建业务模型

 
实体用于和数据表进行映射,业务模型用于在控制器和视图之间进行数据的交互,所以为了进行分层和数据隔离,需要创建模块,在本例中模型为Movie,字段名称和Entity保持一致【也可以不一致】。如下所示:
  1. 1 namespace DemoCoreMVC.Models
  2. 2 {
  3. 3     public class Movie
  4. 4     {
  5. 5         /// <summary>
  6. 6         /// 主键唯一标识
  7. 7         /// </summary>
  8. 8         public long Id { get; set; }
  9. 9
  10. 10         /// <summary>
  11. 11         /// 电影名称
  12. 12         /// </summary>
  13. 13         public string Name { get; set; }
  14. 14
  15. 15         /// <summary>
  16. 16         /// 发行时间
  17. 17         /// </summary>
  18. 18         public DateTime ReleaseDate { get; set; }
  19. 19
  20. 20         /// <summary>
  21. 21         /// 主角
  22. 22         /// </summary>
  23. 23         public string LeadingRole { get; set; }
  24. 24
  25. 25         /// <summary>
  26. 26         /// 电影类型
  27. 27         /// </summary>
  28. 28         public string Genre { get; set; }
  29. 29
  30. 30         /// <summary>
  31. 31         /// 票价格
  32. 32         /// </summary>
  33. 33         public decimal Price { get; set; }
  34. 34 35     }
  35. 36 }
复制代码
 
安装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. 1 using DemoCoreMVC.Entities;
  2. 2 using Microsoft.EntityFrameworkCore;
  3. 3
  4. 4 namespace DemoCoreMVC
  5. 5 {
  6. 6     public class MovieDbContext:DbContext
  7. 7     {
  8. 8         public MovieDbContext(DbContextOptions<MovieDbContext> options)
  9. 9             : base(options)
  10. 10         {
  11. 11         }
  12. 12
  13. 13         public DbSet<MovieEntity> Movie { get; set; }
  14. 14
  15. 15         protected override void OnModelCreating(ModelBuilder modelBuilder)
  16. 16         {
  17. 17             base.OnModelCreating(modelBuilder);
  18. 18             modelBuilder.Entity<MovieEntity>().ToTable("Movie");
  19. 19         }
  20. 20     }
  21. 21 }
复制代码
注意:在OnModelCreating中,将实体和数据表进行映射。
 
注入EntityFrameworkCore框架

 
在Program.cs中注入框架,并将appSetting.json配置的数据库连接字符串传递进去,如下所示:
  1. 1 using DemoCoreMVC;
  2. 2 using Microsoft.EntityFrameworkCore;
  3. 3
  4. 4 var builder = WebApplication.CreateBuilder();
  5. 5
  6. 6 //注入数据库框架
  7. 7 builder.Services.AddDbContext<MovieDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
  8. 8
  9. 9 // Add services to the container.
  10. 10 builder.Services.AddControllersWithViews();
  11. 11 var app = builder.Build();
  12. 12
  13. 13 // Configure the HTTP request pipeline.
  14. 14 if (!app.Environment.IsDevelopment())
  15. 15 {
  16. 16     app.UseExceptionHandler("/Home/Error");
  17. 17     // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
  18. 18     app.UseHsts();
  19. 19 }
  20. 20 app.UseHttpsRedirection();
  21. 21 app.UseStaticFiles();
  22. 22 app.UseRouting();
  23. 23 app.UseAuthorization();
  24. 24 app.MapControllerRoute(
  25. 25     name: "default",
  26. 26     pattern: "{controller=Home}/{action=Index}/{id?}");
  27. 27
  28. 28 app.Run();
复制代码
 
创建控制器MovieController

 
在项目中,创建MovieController,在Index方法中查询电影信息,并将数据传递给视图,如下所示:
  1. 1 using DemoCoreMVC.Models;
  2. 2 using Microsoft.AspNetCore.Mvc;
  3. 3
  4. 4 namespace DemoCoreMVC.Controllers
  5. 5 {
  6. 6     public class MovieController : Controller
  7. 7     {
  8. 8         private MovieDbContext movieDb;
  9. 9
  10. 10         public MovieController(MovieDbContext movieDb)
  11. 11         {
  12. 12             this.movieDb = movieDb;
  13. 13         }
  14. 14
  15. 15         public IActionResult Index()
  16. 16         {
  17. 17             //1.获取数据库实体
  18. 18             var entities = movieDb.Movie.Skip(0).Take(20).ToList();
  19. 19             //2.将实体转换成业务模型
  20. 20             var movies = entities.Select(e => new Movie()
  21. 21             {
  22. 22                 Id = e.Id,
  23. 23                 Name = e.Name,
  24. 24                 Genre = e.Genre,
  25. 25                 LeadingRole = e.LeadingRole,
  26. 26                 Price = e.Price,
  27. 27                 ReleaseDate = e.ReleaseDate,
  28. 28             }).ToList();
  29. 29             ViewData.Add("Movies",movies);
  30. 30             return View();
  31. 31         }
  32. 32     }
  33. 33 }
复制代码
 
创建视图Index.cshtml

 
视图用于显示电影列表,代码如下所示:
  1. 1 @{
  2. 2     ViewData["Title"] = "Index";
  3. 3     var movies = ViewData["Movies"] as List<Movie>;
  4. 4 }
  5. 5
  6. 6 <h1>Index</h1>
  7. 7 <table class="table">
  8. 8     <thead>
  9. 9         <tr>
  10. 10             <td>序号</td>
  11. 11             <td>电影名称</td>
  12. 12             <td>类型</td>
  13. 13             <td>主演</td>
  14. 14             <td>上映时间</td>
  15. 15             <td>票价</td>
  16. 16             <td>功能</td>
  17. 17         </tr>
  18. 18     </thead>
  19. 19 @for (var i = 0; i < movies.Count; i++)
  20. 20     {
  21. 21         var movie = movies[i];
  22. 22         <tr>
  23. 23         <td>@movie.Id</td>
  24. 24         <td>@movie.Name</td>
  25. 25         <td>@movie.Genre</td>
  26. 26         <td>@movie.LeadingRole</td>
  27. 27         <td>@movie.ReleaseDate</td>
  28. 28         <td>@movie.Price</td>
  29. 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. 30     </tr>
  31. 31 }
  32. 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】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具