EF Core数据库初始化策略包括迁移(Migrations)和手动种子数据(Seeding),不再内置如CreateDatabaseIfNotExists等初始化器;开发初期可用EnsureCreated()快速验证,团队协作和生产环境应统一使用迁移命令管理结构,种子数据则在启动时按需插入。
EF Core本身不再内置数据库初始化器(如EF6的CreateDatabaseIfNotExists等),这些策略在EF Core 1.0之后已被移除。取而代之的是更可控、更明确的初始化方式——主要靠迁移(Migrations)和手动种子数据(Seeding)来完成。但开发者仍可通过自定义逻辑模拟类似行为,常见思路有:
context.Database.EnsureDeleted() + EnsureCreated(),注意会丢失所有数据DbContext初始化时机,比对模型快照差异后触发迁移实际项目中,主流且推荐的方式是迁移 + 种子数据分离处理,分两步走:
dotnet ef migrations add InitialCreatedotnet ef database updateProgram.cs(.NET 6+)中,通过依赖注入获取DbContext和服务提供器,检查关键表是否为空,再插入默认用户、角色、配置项等if (!context.Users.Any()) { context.Users.Add(new ApplicationUser { UserName = "admin" }); context.SaveChanges(); }
Sqlite或LocalDB;生产环境必须使用带完整权限的SQL Server/PostgreSQL连接串看所处阶段:
EnsureCreated()快速验证模型,但别提交到共享分支add migration并提交迁移文件dotnet ef database update或生成SQL脚本人工审核后执行HostedService或Program.cs中按需调用,避免重复插入基本上就这些。不复杂但容易忽略的是:迁移 ≠ 种子数据,结构和内容要分开管。