gpt4 book ai didi

c# - 如何使用 EF Code First 有效地初始化大型种子?

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:51 26 4
gpt4 key购买 nike

我们将 EF Code First 与 SQL Server 一起使用,并且我们有相当大的主数据集(约 150.000 条记录),必须在创建数据库时对其进行初始化。如果这可以在 db-intializer 的 Seed 方法中完成,那将会很方便。

我已经生成了初始化此数据的 SQL 脚本。该脚本由行组成,其中每一行都包含对一千条记录的 INSERT 操作。这是因为 INSERT 命令在单个命令中的总记录数限制为 1000。

因此脚本类似于以下内容:

INSERT INTO MyTable (A, B, C) VALUES (1, 2, 3), (2, 3, 4), ... 1000 records here ... (3, 4, 5);
INSERT INTO MyTable (A, B, C) VALUES (4, 5, 6), (5, 6, 7), ... 1000 records here ... (6, 7, 8);
.... 150 lines

Seed 方法的初始化部分如下所示:

foreach (string command in File.ReadAllLines("InsertMasterData.sql"))
{
context.Database.ExecuteSqlCommand(command);
}

然而,这在我的开发机器上几乎需要 2 分钟,使用 SQL LocalDB 实例(在生产中使用的成熟 SQL Server 上可能会更快,但使用 LocalDB 进行开发很方便)。

有什么方法可以让它更快吗?

最佳答案

我们在播种脚本时遇到了类似的情况。这是我们的代码。您不需要使用异步方法。它会在几秒钟内在本地播种大约 35,000 条记录。

foreach (string file in files)
{
var fileInfo = new FileInfo(file);

Console.WriteLine("Running script {0}", fileInfo.Name);

string text = fileInfo.OpenText().ReadToEnd();

using (var conn = new SqlConnection(connectionString))
{
using (var cmd = new SqlCommand(text, conn))
{
conn.Open();

await cmd.ExecuteNonQueryAsync();
}
}
}

关于c# - 如何使用 EF Code First 有效地初始化大型种子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26222443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com