此方法最方便,但要避免两个应用程序尝试同时迁移
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
。