2016-04-10 2 views
0

DBSet.AddRange()を使用して、動的に作成された100のProductエンティティをプッシュしようとしています。EF 6.0 DBSet.AddRange() - 個々のエンティティエラーをスキップする方法

は、例えば場合は、第一製品のエンティティは、いくつかのデータの問題を持っており、残りのすべての99の製品のエンティティはまた、保存するつもりはない 、Commit()中に 例外がスローされます。

他のエンティティ がDBSet.AddRange()を使用して保存できるように、破損したエンティティのみをスキップすることはできますか?

+0

mvcを使用している場合は、 'Model'で' ModelState.IsValid'を試してみてください。後でRichardと – Eldho

+0

のように個別に追加してコミットしてください。バックグラウンドプロセスはこのファイルを読み込んでDTO&Entitiesを作成し、データベースにダンプします。いくつかの制約のために、このDB操作はEFのみで行う必要があります。 –

+0

ファイルを読み終えたら、有効なオブジェクトのDTOを作成できます。この検証はビジネスで行い、有効なエンティティをコンテキストに添付します。 @リチャードはefコンテキストでは検証できません – Eldho

答えて

1

EFでこれを行うことはできません。の前にロジックを変更してエンティティを検証してから、をEFコンテキストに追加する必要があります。あるいは、個々に追加してそれぞれをコミットする必要がありますが、それははるかに効率が悪くなります。

+0

データはフラットファイルを介して送信されます。バックグラウンドプロセスはこのファイルを読み込んでDTO&Entitiesを作成し、データベースにダンプします。このような非UIバックグラウンドプロセスのシナリオでエンティティを検証する方法はありますか? –

+0

あなたのシナリオは何も変更されません。エンティティが有効かどうかを手動でチェックし、そうであればコンテキストに追加するだけです。このビットをEFに渡すことはできません。エンティティのどれかが無効であれば失敗します。 – Richard

関連する問題