创建基于ASP.NET core 3.1的RazorPagesMovie项目(四)-使用数据库

本节介绍数据库上下文

1、打开/Data/RazorPagesMovieContent.cs 、Startup.cs文件:

  

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Threading.Tasks;
 5 using Microsoft.EntityFrameworkCore;
 6 using RazorPagesMovie.Models;
 7
 8 namespace RazorPagesMovie.Data
 9 {
10     public class RazorPagesMovieContext : DbContext
11     {
12         public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
13             : base(options)
14         {
15         }
16
17         public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
18     }
19 }

  RazorPagesMovieContent对象负责连接到数据库,并将Movie对象映射到数据库中的记录。在Start.cs文件中,ConfigureServices方法中向依赖关系注入(Dependency Injection)容器中注册数据库上下文,第30行:

  

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Threading.Tasks;
 5 using Microsoft.AspNetCore.Builder;
 6 using Microsoft.AspNetCore.Hosting;
 7 using Microsoft.AspNetCore.HttpsPolicy;
 8 using Microsoft.Extensions.Configuration;
 9 using Microsoft.Extensions.DependencyInjection;
10 using Microsoft.Extensions.Hosting;
11 using Microsoft.EntityFrameworkCore;
12 using RazorPagesMovie.Data;
13
14 namespace RazorPagesMovie
15 {
16     public class Startup
17     {
18         public Startup(IConfiguration configuration)
19         {
20             Configuration = configuration;
21         }
22
23         public IConfiguration Configuration { get; }
24
25         // This method gets called by the runtime. Use this method to add services to the container.
26         public void ConfigureServices(IServiceCollection services)
27         {
28             services.AddRazorPages();
29
30             services.AddDbContext<RazorPagesMovieContext>(options =>
31                     options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
32         }
33
34         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
35         public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
36         {
37             if (env.IsDevelopment())
38             {
39                 app.UseDeveloperExceptionPage();
40             }
41             else
42             {
43                 app.UseExceptionHandler("/Error");
44                 // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
45                 app.UseHsts();
46             }
47
48             app.UseHttpsRedirection();
49             app.UseStaticFiles();
50
51             app.UseRouting();
52
53             app.UseAuthorization();
54
55             app.UseEndpoints(endpoints =>
56             {
57                 endpoints.MapRazorPages();
58             });
59         }
60     }
61 }

  ASP.NET Core 配置系统会从appsettings.json文件中读取数据库连接字符串ConnectionString:

 1 {
 2   "Logging": {
 3     "LogLevel": {
 4       "Default": "Information",
 5       "Microsoft": "Warning",
 6       "Microsoft.Hosting.Lifetime": "Information"
 7     }
 8   },
 9   "AllowedHosts": "*",
10   "ConnectionStrings": {
11     "RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-6047c874-bb75-49ef-b998-62db7c5cbaf4;Trusted_Connection=True;MultipleActiveResultSets=true"
12   }
13 }

  其中,Server表示服务器,这里是localdb\\mssqllocaldb;Database表示数据库名称,是一个系统自动生成的,数据库名可以是任意的。在将程序部署到测试或者生产服务器时,可以使用环境变量将连接字符串设置为实际的数据库服务器。以后再详细介绍。

2、SQL Server Express LocalDB

  localdb,是轻型版的数据库引擎。按需启动。默认情况下,它将在c:\用户\你的用户名\目录下创建*.mdf和*_log.ldf文件。我这里生成的如下:

    

  选择“视图”>"SQL Server 对象资源管理器",在对象资源管理中我们可以看到刚才生成的数据库和表:

  

  在dbo.Movie表上右键,选择“视图设计器”,可以查看表格结构以及对应的TSQL和表上其他的对象:

  

  在dbo.Movie表上右键,选择“查看数据”,可以查看我们新增的电影记录:

  

 3、设定数据库种子(Seed the database)

 1 using Microsoft.EntityFrameworkCore;
 2 using Microsoft.Extensions.DependencyInjection;
 3 using RazorPagesMovie.Data;
 4 using System;
 5 using System.Linq;
 6
 7 namespace RazorPagesMovie.Models
 8 {
 9     public static class SeedData
10     {
11         public static void Initialize(IServiceProvider serviceProvider)
12         {
13             using (var context = new RazorPagesMovieContext(
14                 serviceProvider.GetRequiredService<
15                     DbContextOptions<RazorPagesMovieContext>>()))
16             {
17                 // Look for any movies.
18                 if (context.Movie.Any())
19                 {
20                     return;   // DB has been seeded
21                 }
22
23                 context.Movie.AddRange(
24                     new Movie
25                     {
26                         Title = "When Harry Met Sally",
27                         ReleaseDate = DateTime.Parse("1989-2-12"),
28                         Genre = "Romantic Comedy",
29                         Price = 7.99M
30                     },
31
32                     new Movie
33                     {
34                         Title = "Ghostbusters ",
35                         ReleaseDate = DateTime.Parse("1984-3-13"),
36                         Genre = "Comedy",
37                         Price = 8.99M
38                     },
39
40                     new Movie
41                     {
42                         Title = "Ghostbusters 2",
43                         ReleaseDate = DateTime.Parse("1986-2-23"),
44                         Genre = "Comedy",
45                         Price = 9.99M
46                     },
47
48                     new Movie
49                     {
50                         Title = "Rio Bravo",
51                         ReleaseDate = DateTime.Parse("1959-4-15"),
52                         Genre = "Western",
53                         Price = 3.99M
54                     }
55                 );
56                 context.SaveChanges();
57             }
58         }
59     }
60 }

  第18-21行:如果DB中有任何电影,则会返回种子初始值设定项,并且不会添加任何电影。

  添加种子初始值设定项:

  打开Program.cs文件,修改Main方法:

 1 using Microsoft.AspNetCore.Hosting;
 2 using Microsoft.Extensions.DependencyInjection;
 3 using Microsoft.Extensions.Hosting;
 4 using Microsoft.Extensions.Logging;
 5 using RazorPagesMovie.Models;
 6 using System;
 7
 8 namespace RazorPagesMovie
 9 {
10     public class Program
11     {
12         public static void Main(string[] args)
13         {
14             var host = CreateHostBuilder(args).Build();
15
16             using (var scope = host.Services.CreateScope())
17             {
18                 var services = scope.ServiceProvider;
19
20                 try
21                 {
22                     SeedData.Initialize(services);
23                 }
24                 catch (Exception ex)
25                 {
26                     var logger = services.GetRequiredService<ILogger<Program>>();
27                     logger.LogError(ex, "An error occurred seeding the DB.");
28                 }
29             }
30
31             host.Run();
32
33         }
34
35         public static IHostBuilder CreateHostBuilder(string[] args) =>
36             Host.CreateDefaultBuilder(args)
37                 .ConfigureWebHostDefaults(webBuilder =>
38                 {
39                     webBuilder.UseStartup<Startup>();
40                 });
41     }
42 }

4、测试

  1、删除数据库中我们刚才录入的数据:既可以从数据库中直接删除,也可以通过delete页面进行

  2、退出IIS Express

  

  3、再次按下ctrl+F5,运行。我们发现,即使我们已经完全删除录入的记录,页面上还是还是有记录,这就是数据库的种子:

  

  下一节,我们介绍数据的展示

原文地址:https://www.cnblogs.com/hiwuchong/p/12082339.html

时间: 2024-12-10 00:58:01

创建基于ASP.NET core 3.1的RazorPagesMovie项目(四)-使用数据库的相关文章

创建基于ASP.NET core 3.1 的RazorPagesMovie项目(二)-应用模型类配合基架生成工具生成Razor页面

本节中,将学习添加用于管理跨平台的SQLLite数据库中的电影的类Movie.从ASP.NET core 模板创建的应用使用SQLLite数据库. 应用模型类(Movie)配合Entity Framework core(简称EF core,这是一种对象关系映射框架(ORM),它可以简化数据访问)使用,以处理数据库 模型类称为POCO类,因为它们与EF Core 没有任何依赖关系.它定义了数据库中存储的数据属性. 一.添加数据模型“Movie” 1.右键单击“RazorPagesMovie”项目>

创建基于ASP.NET core 3.0 的RazorPagesMovie项目(一)-创建和使用默认的模板

声明:参考于asp.net core 3.1 官网(以后不再说明) 本教程是系列教程中的第一个教程,介绍生成 ASP.NET Core Razor Pages Web 应用的基础知识. 在本系列结束时,你将拥有一个管理电影数据库的应用 环境:visual studio 2019. .ASP.NET core 3.1 1.从 Visual Studio“文件”菜单中,选择“新建”>“项目” . 2.选择ASP.NET Core Web 应用程序,然后选择“下一步” . 3.项目命名为“RazorP

创建基于ASP.NET core 3.1 的RazorPagesMovie项目(三)-已搭建基架的Razor页面解释和更新

本节主要介绍在上一节中通过搭建基架而创建的Razor页面,并做一些UI改变. 一.创建.删除.详细信息和编辑页面 1.双击Pages/Movies/Index.cshtml.cs文件,这是一个Razor页面模型: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Threading.Tasks; 5 using Microsoft.AspNetCore.Mvc; 6 us

基于ASP.NET Core 创建 Web API

使用 Visual Studio 创建项目. 文件->新建->项目,选择创建 ASP.NET Core Web 应用程序. 基于 ASP.NET Core 2.0 ,选择API,身份验证选择:不进行身份验证. 至此,就完成了一个ASP.NET Core项目的创建,项目中已经默认创建了一个ValuesController,F5运行项目,可以在浏览器调用已经存在的API. 参考资料: ASP.NET Core 中文文档 第二章 指南(2)用 Visual Studio 和 ASP.NET Core

基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(4) - EF Core CodeFirst 数据库创建

概述 在 基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(2) - EF Core (MySQL) CodeFirst 数据库迁移与依赖注入 一文中,我们介绍如何快速以CodeFirst快速搭建数据库,这一章,我们来完善一下创建数据库中可以添加的验证与约束. 微软爸爸官方文档:Entity Framework Core 数据库操作 (1) 数据库迁移  add-migration [任一名称,须唯一] (2) 更新数据库  update-database (3) 删除数据库迁

基于ASP.NET Core 3.0快速搭建Razor Pages Web应用

前言 虽然说学习新的开发框架是一项巨大的投资,但是作为一个开发人员,不断学习新的技术并快速上手是我们应该掌握的技能,甚至是一个.NET Framework开发人员,学习.NET Core 新框架可以更快速掌握其中的编写,构建,测试,部署和维护应用程序. 您现有的.NET Framework应用程序可以在其他操作系统上工作.对于希望扩大类库的受众平台,或者希望在分布式应用程序的其他领域使用相同代码的开发人员来说,这是非常好的选择. .NET Core是为了重新启动某些Framework组件而为其他

基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(0) - 目录概述

概述 博主自毕业后,进公司就一直是以ASP.NET MVC 5.0 + MySQL 进行项目开发,在项目也使用了很多常用功能,如 WCF.SignalR.微信公众号API.支付宝API.Dapper等等,前端是大杂烩,如:Bootstrap.AmazeUI.EasyUI.Light7.WeUI等等.其实对于我们公司的项目来说,技术栈虽说不庞大,但五脏俱全,而且基于这一套技术,开发速度有保证.但是,作为一个有梦想的程序猿,必须与时俱进,因此无意中接触了.Net Core 2.0.听说它是开源的?它

[译]基于ASP.NET Core 3.0的ABP v0.21已发布

基于ASP.NET Core 3.0的ABP v0.21已发布 在微软发布仅仅一个小时后, 基于ASP.NET Core 3.0的ABP v0.21也紧跟着发布了. v0.21没有新功能.它只是升级到稳定的ASP.NET Core 3.0. 查看v0.20发行说明以获取新功能,增强功能和错误修复. 关于v1.0 ABP框架越来越接近v1.0.我们打算在今年10月中旬发布1.0. 现在,我们将完善测试和文档. .NET Conf 2019 微软已经在为期3天的虚拟会议.NET Conf 2019发

从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装

标题:从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11343141.html 源代码:https://github.com/lamondlu/DynamicPlugins 前情回顾 从零开始实现ASP.NET Core MVC的插件式开发(一) - 使用Application Part动态加载控制器和视图 从零开始实现ASP.NET Core MVC的插件式开发(二