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

时间:2018-05-04 10:46:53 浏览量:428 阅读时间:20.91 分钟

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



打赏

感谢您的支持,我会继续努力的!


支付宝
注册用户登录后才能发表评论,请 登录 注册,请访问 网站首页。
总计(0)条评论

admin

软件工程师

    文章目录

    返回顶部小火箭