私は一括操作のためにEntityFramework-Plusを使用する予定でしたが、一括挿入をサポートしているかどうかはわかりません。
例えば、私はParen
tエンティティを持っていて、 Child
エンティティを大量に挿入したいのですが、EF Plus
下のコードでは、親の数は1000-2000の範囲にあり、子供の数は10-20です。条件を満たしている場合は、各親に同じ子を追加したい
public async Task AddChildern(IEnumerable<Child> children)
{
var ids = GetIDs();
var result = _dbContext.Parent.Where(x=> ids.contains(x.ID)).ToListAsync();
foreach(var p in result)
{
foreach(var child in children)
{
var flag = CanAddChild(child);
if(flag)
{
p.Children.Add(child);
}
}
}
}
免責事項 :私はEntity Framework Plusプロジェクトのオーナーです
このライブラリはBulkInsert
サポートしていません。
免責事項 :私はEntity Framework Extensionsプロジェクトのオーナーです
このライブラリはBulkInsertをサポートしていますが、無料ではありません。
(EF Plusはこのライブラリによって駆動されます)
あなたのシナリオでは、子のエンティティは親(ナビゲーションプロパティまたは親IDなし)と直接関係しないため、 BulkSaveChanges
メソッドを使用する必要があります。
public async Task AddChildern(IEnumerable<Child> children)
{
var ids = GetIDs();
var result = _dbContext.Parent.Where(x=> ids.contains(x.ID)).ToListAsync();
foreach(var p in result)
{
foreach(var child in children)
{
var flag = CanAddChild(child);
if(flag)
{
p.Children.Add(child);
}
}
}
}
// ...code...
_dbContext.BulkSaveChanges();
編集:回答コメント
子供はParentIDを持っています
リレーションがどのように設定されているかに応じて、直接BulkInsertを実行することもできます。
_dbContext.BulkInsert(result.SelectMany(x => x.Children));