.NET Core使用IEntityTypeConfiguration做数据种子仅迁移Schema无测试数据
解决.NET Core EF Core数据种子未写入SQL数据库的问题
可能原因及解决方案
1. 确保实体配置已被DbContext加载
你的CategoryConfiguration和ProductConfiguration必须在DbContext的OnModelCreating方法中注册,EF Core才能识别其中的种子数据配置。
在DbContext类中添加以下代码:
protected override void OnModelCreating(ModelBuilder modelBuilder) { // 注册实体配置类 modelBuilder.ApplyConfiguration(new CategoryConfiguration()); modelBuilder.ApplyConfiguration(new ProductConfiguration()); // 其他模型配置逻辑... }
2. 重新生成包含种子数据的迁移并更新数据库
如果现有迁移是在添加种子数据前创建的,迁移文件不会包含种子数据的插入逻辑。需要重新生成迁移:
打开包管理器控制台或终端,执行生成迁移命令:
Add-Migration AddSeedData该命令会创建新的迁移文件,其中包含插入种子数据的SQL语句。
执行数据库更新命令,将种子数据写入SQL数据库:
Update-Database
3. 替换DateTime.Now为固定时间值
种子数据中使用DateTime.Now会导致每次生成迁移时时间戳都不同,EF Core会判定种子数据发生变化,可能引发不必要的迁移或插入失败。将CreateTime改为固定的DateTime值:
修改CategoryConfiguration中的种子数据:
new Category { Id = Guid.Parse("bdafc3c9-abe6-4ac5-bdb6-8361524ff999"), Name = "Mobile Phones", CreateTime = new DateTime(2024, 5, 20, 10, 0, 0) // 固定时间 }, new Category { Id = Guid.Parse("f5a4eb59-26b3-4784-b427-65b5f7f57052"), Name = "Laptops", CreateTime = new DateTime(2024, 5, 20, 10, 0, 0) }
4. 验证迁移文件中的种子数据顺序
EF Core会自动处理依赖实体的插入顺序(先插入Category,再插入Product),可以打开新生成的迁移文件,确认Up方法中的InsertData语句顺序是否正确:
- 先执行
Category表的插入操作 - 再执行
Product表的插入操作
若顺序错误可手动调整,通常EF Core会自动处理该逻辑。
内容的提问来源于stack exchange,提问作者Ahmed Elsayed
相关产品推荐
相关产品推荐

