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