下面是我在创建数据库后手动使用的脚本,用于生成测试用的无用数据:
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条记录。
发布于 2020-07-08 03:30:58
如果您使用的是EF Core2.1及更高版本,那么使用HasData方法是添加种子数据的理想方法。
我们可以在'OnModelCreating‘方法中使用ModelBuilder对象来调用它,以将数据作为代码的一部分添加,首先是migrations.The数据,然后在数据库搭建或初始化并应用迁移时第一次获得种子。
您还可以将其与Bogus结合使用,为实体生成假数据。
内联是一个创建50000个对象的场景。程序成功执行,没有任何问题。事实上,ef core足够智能,可以将数据分成每批700-800个对象的批查询,并将其推送到数据库中。
实体:
public class Person
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string FirstName { get; set; }
public string LastName { get; set; }
}OnModelCreating
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);
}https://stackoverflow.com/questions/62751813
复制相似问题