Я создал конечный автомат рабочего процесса Windows, который имеет пользовательские действия (CodeActivity). Эти пользовательские действия должны иметь доступ к базе данных, и у меня есть свойство, которое содержит соединение с базой данных.Пользовательские действия рабочего процесса Windows, которые получают доступ к базе данных, их повторное использование и состояние
В начале каждого действия я инициализирую контекст базы данных, делаю некоторые вещи, а затем удаляю действие базы данных. В настоящее время это вызывает проблему, которая, по моему мнению, сводится к тому, что один и тот же экземпляр активности кода можно использовать, если активность запускается из двух отдельных экземпляров рабочего процесса одновременно.
Например, давайте предположим, что моя деятельность называется DoSomething и выглядит следующим образом:
public class DoSomething : CodeActivity
{
protected DbContext DbContext { get; set; }
protected override void Execute(CodeActivityContext context)
{
using (this.DbContext = CreateMyDatabaseContext())
{
DoSomething(this.DbContext);
}
}
}
Если два экземпляра рабочего процесса Invoke DoSomething(), в то же время, то (поскольку тот же экземпляр DoSomething используется), они будут указывать на тот же контекст базы данных.
Но вместо этого я хочу, чтобы каждый вызов активности использовал новый экземпляр действия.
Если это невозможно, я понимаю, что мне нужно будет удалить любые свойства экземпляра из этой активности, и это приемлемый ответ.
Но мне интересно, есть ли другой механизм, в котором я могу иметь свойства экземпляра. Например, существует ли свойство рабочего процесса, которое определяет, как создаются объекты активности (например, отдельный экземпляр для каждого рабочего процесса)? Или что-то типа того?
Спасибо за вашу помощь, Эрик
Я пришел к такому же выводу - что активность не должен использовать не поточно-объекты. Спасибо за ваш комментарий. – Eric