当前位置: 首页 > article >正文

EntityFramework Core 数据种子

Entity Framework Core (EF Core) 中,数据种子(Seed Data)用于在应用程序启动时向数据库表中插入一些默认数据。它通常用于为应用程序提供初始数据,或在开发和测试阶段填充数据库。EF Core 支持通过 模型构建器 来实现数据种子功能。

数据种子操作步骤

  1. 定义数据模型:首先,你需要确保你有一个合适的模型(例如 ProductCategory 等)。

  2. 使用 OnModelCreating 方法进行数据种子配置:在你的 DbContext 类中重写 OnModelCreating 方法,使用 ModelBuilder 类来定义数据种子。

  3. 应用迁移:你需要确保数据库已经正确创建,并应用了迁移。

示例:如何使用 EF Core 进行数据种子

假设我们有一个 ProductCategory 两个模型,下面的示例演示了如何进行数据种子。

1. 定义模型
public class Category
{
    public int CategoryId { get; set; }
    public string Name { get; set; }
    public List<Product> Products { get; set; }
}

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int CategoryId { get; set; }
    public Category Category { get; set; }
}
2. 在 DbContext 中配置数据种子

在你的 DbContext 中,重写 OnModelCreating 方法,并使用 ModelBuilder 来添加数据种子。

public class ApplicationDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }
    public DbSet<Category> Categories { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // 种子数据:Category
        modelBuilder.Entity<Category>().HasData(
            new Category { CategoryId = 1, Name = "Electronics" },
            new Category { CategoryId = 2, Name = "Clothing" }
        );

        // 种子数据:Product
        modelBuilder.Entity<Product>().HasData(
            new Product { ProductId = 1, Name = "Laptop", Price = 999.99m, CategoryId = 1 },
            new Product { ProductId = 2, Name = "Smartphone", Price = 599.99m, CategoryId = 1 },
            new Product { ProductId = 3, Name = "T-shirt", Price = 19.99m, CategoryId = 2 }
        );

        base.OnModelCreating(modelBuilder);
    }
}

在这个示例中,HasData 方法用于指定默认数据。你可以看到我们为 CategoryProduct 表指定了初始数据。 CategoryId 是外键,它链接到 Product 表中的 CategoryId 字段。

3. 应用迁移

一旦你配置好数据种子,就需要创建一个新的迁移,并将其应用到数据库。

  1. 生成迁移:

    dotnet ef migrations add SeedData
    
  2. 更新数据库:

    dotnet ef database update
    

这时,数据库中会自动填充定义的种子数据。如果你检查数据库,你会发现 CategoryProduct 表中有了相应的初始数据。

数据种子更新和迁移

  1. 数据种子的更新:每次你更改了种子数据时(例如修改了数据),你需要生成新的迁移并执行数据库更新。这不会删除已有数据,而是会根据新的迁移添加或修改数据。

  2. 避免重复插入:EF Core 会通过迁移版本来追踪数据种子。因此,EF Core 会避免重复插入已经存在的种子数据,前提是你没有显式地修改种子数据并更新迁移。

其他常见场景

  • 条件插入:EF Core 的 HasData 插入数据是一个简化的数据种子方法,它通常会在每次迁移时插入相同的数据。如果你需要根据条件进行插入,你可以通过其他方式(如在应用程序启动时检查数据是否存在)进行数据插入。

  • 批量种子数据:如果种子数据较大,可以考虑从文件或其他来源加载种子数据。

总结

  • EF Core 数据种子 允许在应用程序启动时或迁移时向数据库表插入初始数据。
  • 使用 OnModelCreating 中的 HasData 方法定义种子数据。
  • 数据种子常用于填充默认数据或在开发/测试环境中初始化数据库。

EF Core 的数据种子是一个非常实用的功能,能够帮助开发人员在开发过程中更好地管理和维护数据库的初始状态。


http://www.kler.cn/a/471801.html

相关文章:

  • Docker:针对内网如何安装docker镜像
  • Golang学习笔记_20——error
  • 计算机网络 (29)网络地址转换NAT
  • vue2新增删除
  • Idea(中文版) 项目结构/基本设置/设计背景
  • Linux(Centos 7.6)命令详解:mkdir
  • Wireshark基本使用
  • LabVIEW四边形阻抗继电器
  • 需求分析基本操作流程
  • React使用Redux
  • Hive sql执行文件合并配置参数
  • vue3+vite+tdesign实现日历式可编辑的排课班表
  • 概率论与数理统计--期末
  • 第21章 汇编语言--- DMA(直接内存访问)
  • A second-price auction
  • MySQL 间隙锁避免“可重复读”出现“幻读”
  • OpenCV在现代社会中的应用
  • 【机器学习:四、多输入变量的回归问题】
  • MySQL 如何赶上 PostgreSQL 的势头?
  • 特种设备安全管理人员免费题库限时练习(判断题)