防止のためDbContextの繰り返しによりよじ登るようにして張り付いてい悪いデータ
-
20-12-2019 - |
質問
しているプロセスの輸入エクセSpreadhseet、構文解析のデータデータオブジェクト。このデータ 非常に 疑わしい移動にお客様からのプレッドシートのデータマネジメントへのデータベース管理システムのチェックのための有効なデータです。
私の輸入の過程で、人生を楽しむことができるように基本アメニティチェックのデータに対応いか悪いのデータをきれいに輸入してバリデーション全般のDbContext.
どう思いはしたいのですが、、Row#、スプレッドシートのデータが悪いので簡単に決定するには何が必要で固定のファイルをサポートいたします。
まってからのデータを表計算ソフト(model
の機会なんからのデータベースopp
)この擬似コードの処理:
foreach (var model in Spreadsheet.Rows) { // Again, pseudocode
if(opp != null && ValidateModel(model, opp, row)) {
// Copy properties to the database object
// This is in a Repository-layer method, not directly in my import process.
// Just written here for clarity instead of several nested method calls.
context.SaveChanges();
}
}
をご提供できます。にコードがここに必要な場合には、その問題が私のDbContextの ValidateEntity()
方法(オーバーライドのDbContext).
再度、あるいは、コード長々と書きましたが、私が認識しな機会が失敗したこのレベルの検証、その滞在の一環として、未保存のオブジェクト context
, この繰り返しを得ようとして有効に ValidateEntity()
が呼び出されます。この繰り返し同じ認証エラーメッセージ毎に行後の最初の問題が発生します。
があるので、[編集]ンテキストの取得を停止しようとを検証するためのオブジェクトの失敗した場合に一度の検証[編集]?いうまでお待ちの電話 context.SaveChanges()
最後に一度このようにマッチングできることか連続でのデータベースです。
参考までに、私が使ってい企業の枠組み6.1り付けてまいります。
編集 明らかにするに進のためのマーク-L.どのコードブロック)
今、私のプロセスを繰り返し処理して多くの行が、表計算ソフトを起動します。理由は私の話は私のリポジトリ層における各オブジェクトの保存ではなく、携によるアプローチだけ通話 context.SaveChanges()
一度は自分自身の能力を行がの原因となる検証エラーになります。
嬉しいことを私DbContextのカスタム ValidateEntity()
方法でできていることが評価され、検証の誤差が問題に存在することはない投げの DbEntityValidationException
同事業体ます。
思うようにオブジェクトが次のどれかの場合失敗した検証には、一度のないように保存するオブジェクト回数にかかわらず、 context.SaveChanges()
が呼び出されます。
解決
ご質問は惑わすの節約については荷主体がことができましたジミのアドバイス。ること、また、それによって、企業のコンテキストで追跡できることを確かめの"追加"状態や、停から再検証は切り離します。でも内部リンクさんを再現●コードスニペット:
dbContext.Entry(entity).State = EntityState.Detached;
しかしいとは思わないの方行きたいでんを例外状態で管理す必要以上に(例外は悪名高い).
からの情報を与え、今までの利用によりセットに基づく解
- 修正モデルクラスでが含まれてRowIDの記録の表計算シートの列がもの足りる相当の理由があってこともあります。)
- offにおけるエンティティの追跡のためのコンテキスト(ピー変化の検出可能な各
Add()
するO(1)) - すべての事業体
- 電話
context.GetValidationErrors()
くすべての誤差を一度に使用し、上記のRowIDを無効にされています。
なんでしょうかるかどうかを示すプロセスは保存の行を拒否するファイル全体が、これに応ずる必要がある場合に行い、取り外して無効な行使コードは、上し SaveChanges()
.
最後に、だいたい保存の良い行いに違和感を覚えの設定に基づく方法で用いる新しい DbContext
一行は、少なくとも新規作成し DbContext
後にエラーとなります。のADO.NET チームの主張コンテキスト作成は比較的安い"にしていま持っていない引用または更お手元までこんなにを傷スループット。でも、少なくとも残るO(n)かなスタイルの管理、大型コンテキストを開きその他の問題です。