数据库自动迁移

此方法最方便,但要避免两个应用程序尝试同时迁移

1. 程序包管理器控制台工具 中运行 Add-Migration InitialCreate,创建初始迁移,此时会自动在项目中添加Migrations目录

2. 修改Main方法

public static void Main(string[] args)
{
    var host = CreateHostBuilder(args).Build();

    using (var scope = host.Services.CreateScope())
    {
        var db = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
        db.Database.Migrate();
    }

    host.Run();
}

3. 发布网站并运行,此时初始数据库会自动建立

4. 假设之后修改了表,需要再添加一个迁移,如 Add-Migration AddBlogCreatedTimestamp

5. 再次发布网站并运行,此时数据库就会自动迁移

 

通过原始 SQL 进行任意更改

原始 SQL 还可用于管理 EF Core 不知道的数据库对象。 为此,请在不进行任何模型更改的情况下添加迁移;将生成一个空迁移,然后可以使用原始 SQL 操作填充该迁移。例如

migrationBuilder.Sql(
@"
    UPDATE Customer
    SET FullName = FirstName + ' ' + LastName;
");

migrationBuilder.Sql(
@"
    EXEC ('CREATE PROCEDURE getFullName
        @LastName nvarchar(50),
        @FirstName nvarchar(50)
    AS
        RETURN @LastName + @FirstName;')");

这可用于管理数据库的任何方面,包括:

  • 存储过程
  • 全文搜索
  • 函数
  • 触发器
  • 视图

在大多数情况下,在应用迁移时,EF Core 会在其自己的事务中自动包装每个迁移。 遗憾的是,某些迁移操作无法在某些数据库的事务中执行;对于这些情况,你可以通过传递到来选择不使用 suppressTransaction: true 事务 migrationBuilder.Sql 。

 

posted @ 2020-08-23 15:54  yetsen  阅读(411)  评论(0编辑  收藏  举报