ある友人が、「サーバー上の Breeze 変更セット データを検査し、データをデータベースにコミットする前にサーバー側の検証とセキュリティ チェックを実行する方法の例やドキュメントはありますか?」と尋ねます。私の答えは次のとおりです。
1 に答える
この目的のための Breeze.NET 機能について説明しているドキュメントの「カスタム EFContextProvider 」トピックを参照してください。
このトピックは
EFContextProvider<T>
具体的には を対象としていますが、ほとんどのポイントは基本クラスに適用されContextProvider<T>
ます。これは、あらゆる種類のデータ ストアに保存するときに役立ちます (たとえば、「NoDb」のサンプルを参照してください)。
BreezeMvcSpa テンプレートによって作成されたアプリは、保存の検証のテイストを提供します (セキュリティ チェックを含むという最も広い意味で理解されています)。
BreezeMvcSpa テンプレートは、「ASP.NET and Web Tools 2012.2」と共に 2013 年 2 月にリリースされます) 。
から継承しているModels/ TodoRepository.csEFContextProvider<T>
を見てください。現在のユーザーに属する/BeforeSaveEntity(entityInfo)
を常に更新/削除していることを確認するためにオーバーライドします。また、現在のユーザーを新しい に割り当てます。実際のアプリでは、これは特定のエンティティ タイプの検証専用のヘルパー クラスへのディスパッチャになります。この点については、以下で少し詳しく説明します。TodoList
TodoItem
TodoList
他に 2 つの重要なオーバーライドがあります。
BeforeSaveEntities(saveMap)
変更セット全体を一度に調べることができます。これは、おそらくこの保存要求が単一のトランザクションとして意味があることを確認するために、変更セット全体を全体として検証するための優れた方法です。また、エンティティ間のチェックを行うのにも適しています。各エンティティを個別BeforeSaveEntities(saveMap)
に呼び出した後に呼び出されます。BeforeSaveEntity(entityInfo)
BeforeSaveEntities(saveMap)
検証を専用のヘルパー クラスに委任するための適切なディスパッチ ポイントになる可能性があります。ContextProvider
すべての検証ロジックを 1 つの大きなクラスに入れるとは思えません。すべての保存アクティビティがContextProvider.SaveChanges
ゲートを通過することは気にしませんが、それ自体ですべての作業を実行したくはありませんContextProvider
。
SaveChangesCore
他の重要なオーバーライドです。ここで、保存前の最終的な準備を行い、実際にデータベースの保存を実行するもの (DbContext.SaveChanges
メソッドなど) に変更セットを渡します。制御を に戻す前に、保存操作の結果を傍受することができますContextProvider
。
DbContext
また、 を使用する場合、EF はモデル属性で指定した検証 (標準セットとカスタム検証属性の両方)を適用することにも注意してください。
保存に関するアドバイスは他にもありますが、今すぐ消化するにはこれで十分でしょう。