0

我無法定義在添加/更新實體時我的OperationContract應該是什麼。我想通過WCF服務(它將實例化一個業務經理來做實際的驗證)將實體(或實體列表)發送到ObjectContext通過WCF驗證自我跟蹤實體(EF)

如果實體通過了所有的驗證規則(這可能需要查詢數據庫來確定更復雜的業務規則的合格/不合格),它將被保存到數據庫中,我需要能夠傳回它的ID(標識列主鍵)和併發標記(timestamp列)的值,但是如果它失敗了,顯然我們希望有一條或多條消息說明錯誤。在更新的情況下,我們所需要的只是一個併發令牌的新值,但我們又需要驗證消息。

爲了使它更棘手,一個實體也可以有多個子/實體實體。例如,一次旅行將有停止,可能有訂單。

我只是想知道人們在現實世界中如何處理這個問題。最簡單的例子只是顯示WCF服務的操作,如:

[OperationContract] 
bool AddEntity(Entity e); 

[OperationContract] 
bool UpdateEntity(Entity e); 

有沒有人有任何偉大的想法來處理這個問題?我想我真的只是在這裏尋找實際的建議。

我們應該試圖在一個服務調用中保存對象集合嗎?

我們應該通過故障合同傳達驗證信息嗎?

如有任何建議/意見將會有幫助,謝謝!

回答

0

我們是否應該試圖在一個服務中保存一個 對象集合 call?

如果你的意思是在一次通話中保存整個對象圖,那麼答案肯定是肯定的。如果你的意思是在一次調用中保存多個獨立的對象圖(集合),那麼答案可能是肯定的。儘量減少客戶端和服務之間的往返次數,但同時這樣做可能會帶來複雜性,這是一個好主意。您必須決定整個集合是否必須保存爲原子操作,或者您是否願意只保存部分集合併爲其餘部分返回錯誤。這將影響你的架構的其餘部分。

我們應該通過錯誤合約來傳達驗證 消息嗎?

是的,但只有當您將保存操作用作原子時,因爲錯誤契約是異常,並且異常應該會中斷當前操作並僅返回驗證錯誤。應該有足夠的單一錯誤合同來傳輸所有驗證錯誤。不要爲每個單一的驗證錯誤引發異常,因爲它會讓你的應用程序變得煩人而且毫無用處。

如果您只想保存通過驗證並返回其他錯誤的集合的一部分,則不應使用錯誤契約。代替錯誤合約,您應該有一些容器數據合同用於響應,該合同將包含保存數據的ID和時間戳以及未保存數據的ID和錯誤。

對STEs的一點點說明:傳回Ids和時間戳可能會很棘手。我不確定是否在設置時不必關閉跟蹤,然後再次開啓跟蹤。