这是我在创建数据库后手动使用的脚本,以生成无用的数据进行测试:
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条记录。
答案 0 :(得分:0)
如果您使用的是EF Core 2.1和更高版本,则使用HasData方法是添加种子数据的理想方法。
我们可以使用'OnModelCreating'方法中的ModelBuilder对象来调用它,以将数据添加为代码首次迁移的一部分。然后在数据库被脚手架或初始化并应用迁移时的第一次数据播种。
您还可以将其与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);
}