2013-02-16 24 views

回答

2

請參閱描述Breeze.NET設施的文檔中的「Custom EFContextProvider」主題。

雖然這個話題瞄準EFContextProvider<T>具體而言,大部分點應用到基類,ContextProvider<T>,保存到任何類型的數據存儲(見"NoDb" sample爲例)時,這是有幫助的。

BreezeMvcSpa模板產生的應用程序提供保存的驗證(在廣義上理解爲包括安全檢查)的味道。

的BreezeMvcSpa模板將2013年2月公佈的結合 「ASP.NET和Web工具2012.2」

看型號/ TodoRepository.csEFContextProvider<T>繼承。它會覆蓋BeforeSaveEntity(entityInfo)以確認您始終在更新/刪除屬於當前用戶的TodoList/TodoItem。它還將當前用戶分配給新的TodoList。在一個真正的應用程序中,這將是一些幫助程序類的調度程序,致力於驗證特定的實體類型,下面稍微詳細闡述一點。

還有另外兩個重要的替代:

BeforeSaveEntities(saveMap)給你一個機會來檢查整個變化一次設置。這是驗證整個變更集的一個很好的方式,可能會確保這個保存請求作爲單個事務處理有意義。這也是做一些跨實體檢查的好地方。在爲每個實體分別呼叫BeforeSaveEntity(entityInfo)後調用BeforeSaveEntities(saveMap)

BeforeSaveEntities(saveMap)可能是將驗證委託給專用幫助程序類的一個很好的調度點。我懷疑我會將所有的驗證邏輯放在一個大的ContextProvider類中。我不介意所有的活動都通過ContextProvider.SaveChanges大門漏斗,但我不想在ContextProvider本身做所有的工作。

SaveChangesCore是另一個重要的覆蓋。這就是您進行最終預存儲準備的地方,並將更改集轉交給實際執行數據庫保存的內容(例如,DbContext.SaveChanges方法)。在將控制返回到ContextProvider之前,您可以攔截保存操作的結果。

還要注意的是,使用DbContextEF當你應用模型規定的驗證屬性,無論是標準設置和自定義屬性驗證。

我有更多的保存建議,但這可能足以現在消化。

相關問題