gpt4 book ai didi

workflow-foundation-4 - 访问数据库、重用和状态的自定义 Windows 工作流事件

转载 作者:行者123 更新时间:2023-12-04 08:23:46 24 4
gpt4 key购买 nike

我创建了一个具有自定义事件 (CodeActivity) 的 Windows 工作流状态机。这些自定义事件需要访问数据库,我有一个包含数据库连接的属性。

在每个 Action 开始时,我初始化数据库上下文,做一些事情然后处理数据库 Action 。这目前导致了一个问题,我认为这归结为这样一个事实,即如果同时从工作流的两个单独实例调用一个事件,则可以使用代码事件的同一实例。

例如,假设我的事件名为 DoSomething,如下所示:

public class DoSomething : CodeActivity
{
protected DbContext DbContext { get; set; }

protected override void Execute(CodeActivityContext context)
{
using (this.DbContext = CreateMyDatabaseContext())
{
DoSomething(this.DbContext);
}
}

}

如果工作流的两个实例同时调用 DoSomething(),那么(因为正在使用相同的 DoSomething 实例),它们将指向相同的数据库上下文。

但我想要的是让事件的每次调用都使用事件的新实例。

如果这不可能,那么我知道我需要从事件中删除任何实例属性,这是一个可以接受的答案。

但我想知道我是否可以使用另一种机制来拥有实例属性。例如,工作流上是否有一个属性决定如何创建事件对象(例如,每个工作流的单独实例)?或者类似的东西?

感谢您的帮助,埃里克

最佳答案

使用单个或多个工作流实例的选项取决于您如何托管和初始化工作流?

尽管如此,使用不应该初始化属性。 Using 语句将变量的生命周期限制在该 block 内,而属性可以在任何地方使用。

一般来说,对于Workflows,我绝不会使用非线程安全的对象作为Activity的属性。特别是如果该对象的实例是针对特定请求绑定(bind)的。更好的方法是在一个事件中初始化对象(可以设计得非常灵活和强大),将它添加到当前 ActivityContext 并在下一个事件中使用它。

关于workflow-foundation-4 - 访问数据库、重用和状态的自定义 Windows 工作流事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15712048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com