一位朋友問:「您是否有關於如何檢查服務器上Breeze變更集數據的示例或文檔,並在將數據提交給數據庫之前執行服務器端驗證和安全檢查?」我的回答如下。如何在保存之前檢查服務器上的更改集數據?
回答
請參閱描述Breeze.NET設施的文檔中的「Custom EFContextProvider」主題。
雖然這個話題瞄準
EFContextProvider<T>
具體而言,大部分點應用到基類,ContextProvider<T>
,保存到任何類型的數據存儲(見"NoDb" sample爲例)時,這是有幫助的。
由BreezeMvcSpa模板產生的應用程序提供保存的驗證(在廣義上理解爲包括安全檢查)的味道。
的BreezeMvcSpa模板將2013年2月公佈的結合 「ASP.NET和Web工具2012.2」)
看型號/ TodoRepository.cs從EFContextProvider<T>
繼承。它會覆蓋BeforeSaveEntity(entityInfo)
以確認您始終在更新/刪除屬於當前用戶的TodoList
/TodoItem
。它還將當前用戶分配給新的TodoList
。在一個真正的應用程序中,這將是一些幫助程序類的調度程序,致力於驗證特定的實體類型,下面稍微詳細闡述一點。
還有另外兩個重要的替代:
BeforeSaveEntities(saveMap)
給你一個機會來檢查整個變化一次設置。這是驗證整個變更集的一個很好的方式,可能會確保這個保存請求作爲單個事務處理有意義。這也是做一些跨實體檢查的好地方。在爲每個實體分別呼叫BeforeSaveEntity(entityInfo)
後調用BeforeSaveEntities(saveMap)
。
BeforeSaveEntities(saveMap)
可能是將驗證委託給專用幫助程序類的一個很好的調度點。我懷疑我會將所有的驗證邏輯放在一個大的ContextProvider
類中。我不介意所有的活動都通過ContextProvider.SaveChanges
大門漏斗,但我不想在ContextProvider
本身做所有的工作。
SaveChangesCore
是另一個重要的覆蓋。這就是您進行最終預存儲準備的地方,並將更改集轉交給實際執行數據庫保存的內容(例如,DbContext.SaveChanges
方法)。在將控制返回到ContextProvider
之前,您可以攔截保存操作的結果。
還要注意的是,使用DbContext
,EF當你應用模型規定的驗證屬性,無論是標準設置和自定義屬性驗證。
我有更多的保存建議,但這可能足以現在消化。
- 1. Breeze.js - 更改服務器上的實體的屬性值保存實體之前
- 2. 如何保存畫布圖像上傳到服務器之前?
- 3. 在Web服務器上保存數據
- 4. 如何在檢出之前查看存儲庫端的更改?
- 5. CakePHP在保存到數據庫之前更改數據
- 6. 如何在dropdown更改後使用angularjs檢查數據保存
- 7. 如何在提交給第三方服務器之前保存數據?
- 8. 更改mime類型的圖像之前,將它保存在服務器
- 9. 在上傳到服務器之前更改文件的名稱
- 10. 在將圖像保存到服務器之前檢查圖像大小
- 11. 在保存事件之前/之後查看Magento模型數據更改?
- 12. 如何將數據保存到服務器上(「在雲端」)?
- 13. 在下載之前檢查文件是否存在於ftp服務器上
- 14. 如何保存之前更改使用前將文檔保存在貓鼬
- 15. Ansible僅在更改之前的ios_config任務時才保存
- 16. 如何檢查FTP服務器上的文件是否存在?
- 17. 更改圖像大小以保存在PHP服務器上
- 18. 檢查保存之前的模型值
- 19. 如何在保存新記錄之前檢查數據庫狀態
- 20. 在持續集成服務器上檢查Maven快照依賴關係更改
- 21. 如何在保存到數據庫之前更改表單域值?
- 22. PHP如何檢查存在之前插入數據到mysql
- 23. 你可以檢查一個服務器之前做一個window.location更改?
- 24. 數據未保存在服務器
- 25. 如何自動更新數據庫服務器上的mysql數據庫更改?
- 26. 如何檢查在oracle數據庫服務器中更改的服務名稱的歷史記錄
- 27. 如何在保存在drupal 7之前更改文件?
- 28. EF6在保存前檢查每個實體的更改
- 29. 僅保存服務器上已更改的對象:Restful service + angularjs
- 30. 服務人員:如何更新服務器上的文件更改緩存?