我们将EF Code First与SQL Server配合使用,并且拥有大量的主数据(约150.000条记录),在创建数据库时必须对其进行初始化。如果可以使用Seed
db-intializer的方法完成此操作,将很方便。
我已经生成了初始化此数据的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);
}
但是,在使用SQL LocalDB实例的开发人员机器上,这几乎需要2分钟(在生产环境中使用成熟的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();
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句