You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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. 重新生成包含种子数据的迁移并更新数据库

如果现有迁移是在添加种子数据前创建的,迁移文件不会包含种子数据的插入逻辑。需要重新生成迁移:

  1. 打开包管理器控制台或终端,执行生成迁移命令:

    Add-Migration AddSeedData
    

    该命令会创建新的迁移文件,其中包含插入种子数据的SQL语句。

  2. 执行数据库更新命令,将种子数据写入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:53:12