首页 > 解决方案 > 使用 HasData 仅在 OnModelCreating(...) 内迁移时播种数据

问题描述

我正在使用实体框架创建维度时间模型,并且希望在进行迁移时播种数据。但是,每次在运行时初始化我的数据库上下文时,该代码也会运行。无论如何使用新推荐的播种方案来避免这种情况?

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    // Only run as part of a command-line migration, not app runtime
    List<TimeModel> timeModels = SeedTimeModel(new DateTime(2019, 01, 01), new DateTime(2021, 12, 31));

    modelBuilder.Entity<TimeModel>().HasData(timeModels);
}

我只希望在发出以下命令时运行它:

dotnet ef migrations add InitialCreate
dotnet ef database update

一切似乎都按预期工作,我只想避免每次加载应用程序时性能受到影响。我曾考虑尝试在我的应用程序中设置一个全局变量,假设在运行迁移时不会设置它。然后我可以使我在OnModelCreating(...)中的逻辑有条件。我想知道是否有更清洁的方法。

标签: entity-frameworkentity-framework-core

解决方案


推荐阅读