首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >播种大量数据(EF Core)

播种大量数据(EF Core)
EN

Stack Overflow用户
提问于 2020-07-06 16:10:00
回答 1查看 480关注 0票数 1

下面是我在创建数据库后手动使用的脚本,用于生成测试用的无用数据:

代码语言:javascript
复制
DECLARE @index BIGINT

SET @index = 0
SET IDENTITY_INSERT Persons ON

WHILE @index < 50000
BEGIN   
    INSERT INTO Persons
        (Id, [Name], Code)
    VALUES
        (NEWID(), CONCAT('Person', @index), @index)

    SET @index = @index + 1
END

我如何在数据库初始化的瞬间使用EF核心运行它,或者以某种方式使用数据种子方法?所有的答案都是关于少量数据的,但在我的例子中,我使用了大约50000条记录。

EN

回答 1

Stack Overflow用户

发布于 2020-07-08 03:30:58

如果您使用的是EF Core2.1及更高版本,那么使用HasData方法是添加种子数据的理想方法。

我们可以在'OnModelCreating‘方法中使用ModelBuilder对象来调用它,以将数据作为代码的一部分添加,首先是migrations.The数据,然后在数据库搭建或初始化并应用迁移时第一次获得种子。

您还可以将其与Bogus结合使用,为实体生成假数据。

内联是一个创建50000个对象的场景。程序成功执行,没有任何问题。事实上,ef core足够智能,可以将数据分成每批700-800个对象的批查询,并将其推送到数据库中。

实体:

代码语言:javascript
复制
public class Person
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required]
    public string FirstName { get; set; }

    public string LastName { get; set; }
}

OnModelCreating

代码语言:javascript
复制
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    int id = 1;
    var fakePersons = new Faker<Person>().StrictMode(true)
        .RuleFor(o => o.Id, f => id++)
        .RuleFor(u => u.FirstName, (f, u) => f.Name.FirstName())
        .RuleFor(u => u.LastName, (f, u) => f.Name.LastName());

    var persons = fakePersons.Generate(50000);

    modelBuilder.Entity<Person>().HasData(persons);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62751813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档