学习ASP.NET Core Razor 编程系列六——数据库初始化

简介: 原文:学习ASP.NET Core Razor 编程系列六——数据库初始化 学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.
原文: 学习ASP.NET Core Razor 编程系列六——数据库初始化

 学习ASP.NET Core Razor 编程系列目录

学习ASP.NET Core Razor 编程系列一

学习ASP.NET Core Razor 编程系列二——添加一个实体

 学习ASP.NET Core Razor 编程系列三——创建数据表及创建项目基本页面

学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面

学习ASP.NET Core Razor 编程系列五——Asp.Net Core Razor新建模板页面

 

       Asp.net Core EF创建的BookContext对象,就是用于处理数据库连接和将Book实体对象映射到数据库表(Book)记录的功能。数据库上下文(BookContext)是在startup.cs文件的configureservices方法中向依赖关系注入容器注册,代码如下:

public void ConfigureServices(IServiceCollection services)
        {

            services.AddDbContext<BookContext>(options =>options.UseSqlServer(Configuration.GetConnectionString("BookContext")));
            services.AddMvc();
        } 

          ASP.NET Core 配置系统会读取数据库连接字符串。 为了进行本地开发,它会从 appsettings.json 文件获取数据库连接字符串,数据库连接配置如下:

  "ConnectionStrings": {
    "BookContext": "Server=.\\sqlexpress;Database=CustomDB;Trusted_Connection=True;MultipleActiveResultSets=true"

  }

          将应用程序部署到测试或生产服务器时,可以修改Appsettings.json文件中上将配置,将数据库连接字符串设置为真正的SQL服务器。

          给数据库添加初始数据

          在Visual Studio 2017的解决方案资源管理器中,使用鼠标左键选中Models文件,然后点击鼠标右键,在弹出菜单中选择创建一个新的类文件,命名为SeedData。用下面的代码替换生成的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
 

namespace RazorMvcBooks.Models
{
    public class SeedData
    {
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new BookContext(                serviceProvider.GetRequiredService<DbContextOptions<BookContext>>()))
            {
                // Look for any Books.
                if (context.Book.Any())
                {
                    return;   // DB has been seeded
                }
 
                context.Book.AddRange(
                    new Book
                    {
                        Name = "Python编程 从入门到实践",
                        ReleaseDate = DateTime.Parse("2018-1-12"),
                        Author = "埃里克·马瑟斯",
                        Price = 75.99M
                    }, 

                    new Book
                    {
                        Name = "Java编程的逻辑",
                        ReleaseDate = DateTime.Parse("2018-1-13"),
                        Author = "马俊昌",
                        Price = 48.99M
                    }, 

                    new Book
                    {
                        Name = "统计思维:大数据时代瞬间洞察因果的关键技能",
                        ReleaseDate = DateTime.Parse("2017-12-23"),
                        Author = "西内启",
                        Price = 39.99M
                    }, 

                    new Book
                    {
                        Name = "微信营销",
                        ReleaseDate = DateTime.Parse("2018-01-05"),
                        Author = "徐林海",
                        Price = 33.99M
                    }
                );
                context.SaveChanges();
            }
        } 
    }
}

        以下语句的作用是 如果数据库中有Book表,数据初始化类将返回,不添加任何数据。

             // Look for any Books.
                if (context.Book.Any())
                {
                    return;   // DB has been seeded
                }

 

           添加SeedData.initializer方法

           在Visual Studio 2017的解决方案资源管理器中打开Program.cs文件,然后找到Main方法,在这个方法体的最后面添加SeedData.Initialize()方法,代码如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;
using RazorMvcBooks.Models; 

namespace RazorMvcBooks
{

    public class Program
    {
        public static void Main(string[] args)
        {
            // BuildWebHost(args).Run();
            var host = BuildWebHost(args);
            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    var context = services.GetRequiredService<BookContext>();
                    // requires using Microsoft.EntityFrameworkCore;
                    context.Database.Migrate();
                    // Requires using RazorPagesMovie.Models;
                    SeedData.Initialize(services);
                }

                catch (Exception ex)
                {
                    var logger = services.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex, "数据库数据初始化错误.");

                }
            }

            host.Run(); 

        } 

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }
}

测试应用程序

        第一步,删除数据库中的所有记录。 可以在浏览器的书籍列表页面中使用删除链接,或可以在数据库的SQL Server Management Studio中使用删除指令删除。在浏览器我们进行浏览,删除之前与之后的界面如下图。

 

 

          第二步,强制应用程序初始化(调用 Startup 类中的方法),这样SeedData方法能够正常运行。如果要强制初始化,必须先停止IIS,然后再重新启动。您可以使用以下方法:

           1. 在通知区域中右键单击IIS Express系统托盘图标,在弹出菜单中使用鼠标左键点击“退出”或“停止站点。如下图。

 

          2.  如果是在非调试模式下运行 Visual Studio 2017 ,请按 F5 以在调试模式下运行。

          3. 如果是在调试模式下运行 Visual Studio 2017 ,请先停止调试程序,并再按 F5。

             第三步,在浏览器中浏览我们添加到数据库的初始化数据,如下图。下图1处,是原来的数据,图2是我们应用程序初始化添加进行的数据。仔细观察一下ReleaseDate与Price,可以发现有区别。

 

 

目录
相关文章
|
11月前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
386 15
|
11月前
|
开发框架 .NET PHP
ASP.NET Web Pages - 添加 Razor 代码
ASP.NET Web Pages 使用 Razor 标记添加服务器端代码,支持 C# 和 Visual Basic。Razor 语法简洁易学,类似于 ASP 和 PHP。例如,在网页中加入 `@DateTime.Now` 可以实时显示当前时间。
|
传感器 数据采集 物联网
探索.NET nanoFramework:为嵌入式设备编程的新途径
探索.NET nanoFramework:为嵌入式设备编程的新途
494 7
|
SQL NoSQL 关系型数据库
数据库学习
【10月更文挑战第8天】
150 1
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
448 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
2609 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
733 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
105 3
|
2月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
2月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。

热门文章

最新文章