📜  ef core seed data 没有迁移的伪造数据 - C# (1)

📅  最后修改于: 2023-12-03 14:40:56.850000             🧑  作者: Mango

EF Core Seed Data 没有迁移的伪造数据 - C#


在EF Core中,种子数据是指在数据库迁移时预先插入一些测试数据,以便在应用程序启动时跟踪和测试系统。然而,当需要向已经迁移好的数据库中插入新的种子数据时,我们通常会遇到一些问题,因为我们不应该再次运行迁移脚本。

在这种情况下,需要一种方法来插入新的种子数据,而不是通过迁移脚本来运行。这种方法通常称为伪造数据(Fake Data),意味着我们可以伪造数据到数据库中,而不必再运行这些迁移脚本。

创建Seed Data

为了创建种子数据,我们首先需要创建一个模型类,用于向数据库中插入的条目。在以下示例中,我们将创建一个简单的Book模型类,并包括一些种子数据。

public class Book
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Author { get; set; }
    public int Year { get; set; }
}

接下来,我们需要在 DbContext 中添加一个种子数据方法。 在该方法中,我们将在 OnModelCreating 方法中获取 Book 数据,并将其添加到数据库中。

public class ApplicationDbContext : DbContext
{
    public DbSet<Book> Books { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Book>().HasData(
            new Book { Id = 1, Title = "The Great Gatsby", Author = "F. Scott Fitzgerald", Year = 1925 },
            new Book { Id = 2, Title = "To Kill a Mockingbird", Author = "Harper Lee", Year = 1960 },
            new Book { Id = 3, Title = "Pride and Prejudice", Author = "Jane Austen", Year = 1813 },
            new Book { Id = 4, Title = "Jane Eyre", Author = "Charlotte Bronte", Year = 1847 }
        );
    }
}
添加伪造数据

一旦我们有新的种子数据需要添加到数据库中,我们可以使用以下代码插入最新的数据。这将在数据库中添加新的条目,而不必运行迁移脚本。

using (var db = new ApplicationDbContext())
{
    db.Books.Add(new Book { Id = 5, Title = "The Lord of the Rings", Author = "J.R.R. Tolkien", Year = 1954 });
    db.SaveChanges();
}

在这个例子中,我们将新的 Book 实例添加到 Books 数据集中,并使用 SaveChanges 方法将更改保存到数据库中。

结论

在本文中,我们学习了如何使用 EF Core Seed Data 来向数据库中添加测试数据,并使用伪造数据向已经迁移过的数据库中插入新的种子数据,这使我们不必再次运行迁移脚本。