2011-03-31 64 views
1

我有一個工作流程,並將其保存到數據庫中。這一切工作正常,直到我嘗試在工作流中使用實體。因爲我正在使用POCO,所以工作流似乎無法序列化對象,尤其是關係。WF4問題Poco堅持

現在奇怪的是,我第一次啓動工作流時,序列化的工作原理以及對象在恢復書籤的工作流程中實際運行。但是這次持久化工作流時,出現以下異常: 「EntityCollection對象無法序列化。當RelationshipManager屬於未實現IEntityWithRelationships的實體對象時,無法序列化此類型的對象。

我看到這可能有幫助,但我沒有服務,並沒有想出如何讓它在沒有服務的情況下工作。 http://msdn.microsoft.com/en-us/library/ee705457.aspx

有沒有人有建議?或者你認爲改用服務可以解決我的問題嗎?當保存到持久性

由於存儲在工作流變量

+0

這些對象是什麼?通常WF使用實際上是域對象的對象,而不是「屬於」WF的對象。我總是希望我的域對象可用,而不是在WF中保存和複製。所以我所有的對象持久化都是通過傳統的ORM。 WF只保留ID。當WF激活時,它將檢索它需要的任何對象,然後在完成時釋放它們。 WF不應該堅持域對象,只能堅持其擁有的對象,即只有在WF範圍內的對象。如果你的POCO實際上屬於WF,不知道什麼是最好的,我從來不需要這些。 – Sisyphus 2011-04-07 19:42:06

+0

@Sisyphus謝謝,我決定這樣做,只保存ID。我需要工作流中用戶的價值。有沒有什麼方法可以只加載一次用戶,並在所有活動中使用它,而不會被持久化? – Nischo 2011-04-08 07:16:47

+0

您可以添加一個成員並將其標記爲NonSerialized。這樣它就可以用於所有活動。何時以及如何選擇實例化未保持的任何成員將取決於具體情況。唯一的規則是明顯的規則 - 您負責顯式實例化在訪問之前未保留的任何成員。如果你使用成員變量而不是在使用點實例化對象,請確保你知道你的工作流可以空閒然後補充水分的所有點,不要忽略任何延遲等。 – Sisyphus 2011-04-11 01:10:57

回答

1

對象序列化和反序列化。 與WCF服務一樣,您沒有機會參與此序列化過程。 您的選擇是使用不來自實體框架POCO庫的類型,或將代碼移至您從WF調用的服務。

+0

謝謝,那是我正在尋找的答案。我採取了西西弗斯這樣做的方式,只堅持身份證。 – Nischo 2011-04-08 07:14:50