2011-03-31 66 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