VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 网站开发 > ASPnet >
  • 学习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,可以发现有区别。

 

 出处:https://www.cnblogs.com/chillsrc/p/8872303.html


相关教程