2
我们在SQL Server中使用EF Code First,并且我们有一组相当大的主数据集(〜150.000条记录),在创建数据库时必须进行初始化。如果这可以在db-intializer的Seed
方法中完成,那将很方便。如何用EF代码优先有效地初始化大种子?
我已经生成了初始化这些数据的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进行开发很方便)。
有什么办法可以让这个更快吗?
这是单元测试,所以它一直做?否则,2分钟作为“一次性操作”听起来不太可怕。 – 2014-10-06 18:28:49
[改进实体框架中的批量插入性能]可能的副本(http://stackoverflow.com/questions/6107206/improving-bulk-insert-performance-in-entity-framework) – 48klocs 2014-10-06 18:29:19
我们在开发的早期,所以它有每当模型发生变化时都要完成,因为我们还没有开始使用迁移。当然,如果没有简单的方法使其更快,我总是可以创建一个较小版本的主数据并在开发过程中使用它。 – 2014-10-06 20:09:48