学习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,可以发现有区别。

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

  1. 学习ASP.NET Core Razor 编程系列九——增加查询功能

    原文:学习ASP.NET Core Razor 编程系列九--增加查询功能 学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.N ...

  2. 学习ASP.NET Core Razor 编程系列十八——并发解决方案

    原文:学习ASP.NET Core Razor 编程系列十八--并发解决方案 学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP. ...

  3. 学习ASP.NET Core Razor 编程系列十三——文件上传功能(一)

    原文:学习ASP.NET Core Razor 编程系列十三--文件上传功能(一) 学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习A ...

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

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

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

    原文:学习ASP.NET Core Razor 编程系列三--创建数据表及创建项目基本页面 学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 ...

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

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

  7. netcore 编译 html dll,ASP.NET Core Razor 视图预编译、动态编译

    0x01 前言 ASP.NET Core在默认发布情况下,会启动预编译将试图编译成xx.Views.dll,也许在视图中打算修改一处很细小的地方我们需要再重新编译视图进行发布.下面我将从 ASP.NE ...

  8. ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...

  9. ASP.NET Core Razor 布局视图 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core Razor 布局视图 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core Razor 布局视图 - ASP.NET Core 基础 ...

最新文章

  1. Android--应用开发3(Android layout XML属性)
  2. win7系统启动到一半停止_win7系统启动一半死机的解决方法
  3. 教你如何使用EXCEL中的lookup函数(摘自“MS帮助和支持”)
  4. window下pip 用不了的一种解决办法
  5. TFS中的迭代(五)
  6. pthread_create函数阻塞了主线程_5个状态,Python 中线程的生命周期
  7. 使用delphi 开发多层应用(十三)使用Basic4android 直接访问kbmMW server
  8. hdu1269迷宫城堡(判断有向图是否是一个强连通图)
  9. opengl启动过程
  10. 【力扣】NO.1.两数之和
  11. Vue在HTML模板中插入JS数据
  12. Spark 广播变量和累加器
  13. linux缺页异常处理--用户空间
  14. 【数据结构】----将一个链表拆分为两个链表
  15. winhex数据恢复入门教程
  16. java文件上传与下载
  17. 初学莫队算法 bzoj2038 小z的袜子 分块算法
  18. Dell Optiplex 960 n series 释放SLIC
  19. R语言实现并行计算[parallel,Rdsm]
  20. 任务分配的穷举法、匈牙利法、分支定界法

热门文章

  1. js判断null_JavaScript中的undefined和null
  2. TUXEDO运行监控命令概述
  3. 5G汽车联盟与欧洲汽车电信联盟签署合作谅解备忘录
  4. 【编译打包】nagios-4.0.4-2.el6.src.rpm
  5. 基于rhel7.2的mysql5.7.13安装与配置
  6. Grunt构建工具能做哪些事?
  7. Language binding(语言绑定)
  8. C++11 新关键字
  9. form图片上传遇到错误
  10. Python中的正则表达式(re)