2017-02-20 46 views
5

Entity Frameworkの一括挿入/更新/削除操作が非常に遅くなることがあります。 AutoDetectChangesおよび/またはValidateOnSaveEnabledを無効にするために頻繁に提案されている調整も、必ずしも役立つとは限りません。Z.EntityFramework.Extensionsの非商用の代替手段はありますか?

NuGetのZ.EntityFramework.Extensionsが出回っていますが、一定の期間だけ動作する商用製品のようです。

https://www.nuget.org/packages/Z.EntityFramework.Extensions/

はこれまでのところ、私は実際にのみBulkInsert()、BulkUpdate()とのbulkdelete()が必要です。

私の質問は:Z.EntityFramework.Extensionsとほぼ同じことを任意の信頼性の高い非商用のライブラリーは、

ありますか?

ありがとうございました!

+0

および削除します。https:私はバッチのEntity Framework Plus

の持ち主だ更新& &バッチを削除、あなたはこのライブラリを使用することができます。// githubの.com/loresoft/EntityFramework.Extended。バッチ挿入の場合は、100個程度のエンティティごとに新しいコンテキストを作成します。コンテキストを作成し、100を挿入して変更を保存します。その後、新しいものを作成し、次の100を挿入し、変更を保存します。トランザクションスコープ内のすべてのものをラップします。これは本当に一括挿入ではありませんが、同じコンテキストインスタンス内のすべてのエンティティを挿入するよりはるかに高速です。 – Evk

+0

一般に、ORMはバッチ操作には適していません。これは、小石のトラック積載量を運ぶためにピンセットを使用するようなものです。これを隠すことはできません。一括挿入の最適なオプションは、SqlBulkCopyを使用して、*リアル*の、最小限ログされたストリーミング一括挿入操作を実行することです。一括更新を実行する場合は、適切なUPDATE文を使用します。外部ソースから* UPSERT *を実行したい場合は、すべてをステージング表にインポートし、MERGEを使用してターゲット表を更新してください。 –

+0

つまり、不安定で安全でない、スケーラビリティのないプロセスを信頼性の高いプロセスに変換できるものを探しています。 1。最初から信頼性の高い拡張可能なプロセスを使用してみませんか? –

答えて

2

免責事項:私はあなたが正しいですEntity Framework Extensions

の持ち主です。これは商品です。

毎月無料試用版が用意されていますが、プロダクション環境では製品を購入する必要があります。

バルク

はBulkInsertために、いくつかの無料の選択肢があるの挿入が、注意してください、彼らはすべての相続に&関連付けをサポートしていないと、もはやサポートされていません。

免責事項:あなたが使用できるバッチ更新について

// DELETE all users which has been inactive for 2 years 
ctx.Users.Where(x => x.LastLoginDate < DateTime.Now.AddYears(-2)) 
     .Delete(); 

// UPDATE all users which has been inactive for 2 years 
ctx.Users.Where(x => x.LastLoginDate < DateTime.Now.AddYears(-2)) 
     .Update(x => new User() { IsSoftDeleted = 1 }); 
+0

ありがとう、ジョナサン。私はこれを有効な回答としたいと思います。そのような製品の所有者として、あなたは他の競合他社についてよく見ていると思います。本当に悲しいことに、EF Plusには挿入物がないことがわかりましたが、商用製品とはいくつかの違いがあると思います。 – Michael

+1

残念ながら、私たちはいくつかのオープンソース機能を提供しようとしましたが、このビジネスモデルはうまく機能しません。そう、はい、私たちは両方のライブラリを区別する必要があります。オープンソース/フリープロジェクトほとんどの時間は、より多くのユーザーがそれを使用するにつれてコスト/時間/複雑さが劇的に増加し続けるため、時間の経過とともにサポートされることに失敗します。例えば、昨年、この無料の図書館は、私たちの他の図書館よりも多くの時間をかけてサポートしました! –

+0

こんにちはマイケル、調査中にSqlBulkToolsを見つけたのかどうか疑問に思っていますか? –

関連する問題