EF Core项目在开发过程中创建升级和迁移脚本,同时更新开发数据库,当项目完成,需要部署到生产环境时,需要在生产环境创建或升级数据库。我们希望能够创建一个控制台程序,用它来控制数据库的升级过程,而不是在应用启动时自动升级。我们使用Asp.Net Core自带的Identity模块作为示例。
使用Visual Studio 创建一个Asp.Net Core Web项目,创建项目时身份认证类型选择个人数据库,这样项目会创建相应的EF Core代码。创建一个控制台项目,作为数据库升级工具,引用Web项目,增加如下代码:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using MyIdentity.Data;
using System;
using System.IO;
namespace MigrateIdentity
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Begin Migrate");
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
IConfigurationRoot configuration = builder.Build();
Console.WriteLine("Read Config");
DbContextOptionsBuilder<ApplicationDbContext> optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
var db = new ApplicationDbContext(optionsBuilder.Options);
db.Database.Migrate();
Console.WriteLine("End Migrate");
}
}
}
代码很简单,主要是调用DbContext中Database的Migrate方法,这个方法是关系数据库的扩展。使用这个简单的工具,部署过程就变为:停止应用、更新应用和数据库升级工具、运行数据库升级工具、启动应用这几个步骤。
网友评论