ASP.NET 8首次迁移生成空Migration,需创建无表SQL Server数据库
问题:如何通过EF Core创建仅含空数据库(无表、无模型)
当前配置信息
连接字符串
"ConnectionStrings": { "EvSefDBConnection": "Server=.;Database=evsef_db;Trusted_Connection=True;MultipleActiveResultSets=true" }
DbContext代码
public class EvSefDbContext : DbContext { public EvSefDbContext(DbContextOptions<EvSefDbContext> options) : base(options) { } }
Program.cs配置
builder.Services.AddDbContext<EvSefDbContext>(options => { options.UseSqlServer(builder.Configuration.GetConnectionString("EvSefDBConnection")); });
遇到的问题
执行add-migration InitialDatabase命令后,生成的迁移类Up和Down方法均为空,需要仅在SQL Server中创建无表、无模型的空数据库。
解决方案
EF Core的迁移是基于DbContext中定义的实体模型生成的,你的DbContext里没有任何实体DbSet,所以迁移类为空。要创建空数据库,直接用以下两种方式即可:
直接创建数据库(推荐)
不需要生成任何迁移,直接执行以下命令:- Package Manager Console命令:
Update-Database - .NET CLI命令:
dotnet ef database update
这个命令会读取连接字符串中的数据库名称,自动在指定SQL Server实例中创建对应的空数据库,无需额外操作。
- Package Manager Console命令:
手动修改迁移类(可选)
如果一定要通过迁移流程实现,可手动修改生成的空迁移类,添加数据库创建逻辑:public partial class InitialDatabase : Migration { protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.Sql("CREATE DATABASE evsef_db;"); } protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.Sql("DROP DATABASE evsef_db;"); } }不过注意:EF Core执行
Update-Database时会自动检查目标数据库是否存在,不存在就会创建,所以这种手动写SQL的方式其实没必要,优先用第一种方法。
内容的提问来源于stack exchange,提问作者masoud mazloum
相关产品推荐
相关产品推荐

