エンティティフレームワークを使用してcsvファイルからMS SQL Serverデータベースに一括挿入したいとします。 Entity Frameworkを使用した一括挿入のためのinbuiltメソッドはありますか?Entity Frameworkを使用したcsvファイルからの一括挿入
ありがとうございます。
エンティティフレームワークを使用してcsvファイルからMS SQL Serverデータベースに一括挿入したいとします。 Entity Frameworkを使用した一括挿入のためのinbuiltメソッドはありますか?Entity Frameworkを使用したcsvファイルからの一括挿入
ありがとうございます。
エンティティフレームワークに一括挿入のサポートはありません。 数千のオブジェクトを単にDbSet
に追加してから、SaveChanges
を呼び出すと、パフォーマンスが大幅に低下します。
using(var db = new Db())
{
foreach(var item from data)
{
db.Items.Add(item);
}
db.SaveChanges();
}
EFは大きなメモリ使用量と高い計算となり、すべてのオブジェクトのすべての変更を追跡するので、それは起こります。
EFのバージョンとアプローチによっては、変更の追跡を無効にしたり、ケースのサイズや実際のパフォーマンスに応じて、100または1000アイテムの比較的小さな部分でオブジェクトを挿入することができます。変更を一度計算して保存します。例えば。
int count = 100;
using (var db = new BloggingContext())
{
data.Configuration.AutoDetectChangesEnabled = false;
foreach (var item in data)
{
db.Items.Add(item);
--count;
if(count <= 0)
{
count = 100;
db.SaveChanges();
}
}
db.SaveChanges(); // To make sure we save everything if the last part was smaller than 100
}
また、バルク挿入をサポートするライブラリはほとんどありません。たとえば:https://github.com/loresoft/EntityFramework.Extendedヤロスラフがコメントしたよう
は、Entity Frameworkのチームからの一括挿入への直接支援、
しかし3つのライブラリがそれをサポートはありません。あなたは3つのライブラリについて話小さな記事を見つけることができます:Entity Framework - Bulk Insert
例:
using (var ctx = new EntitiesContext())
{
// Do not use the ChangeTracker or require to add the list in the DbSet
ctx.BulkInsert(list);
}
免責事項:私はプロジェクトのオーナーですEntity Framework Extensions
EntityFramework.E xtendedは一括挿入をサポートしていません。 –
@JonathanMagnanはいそうです...更新と削除のみです。私はそれを忘れてしまった。 –