Можно ли записывать в два разных потока (учетная запись A и B) в одной транзакции, используя EventStore?
blockquote>Начиная с V5 RC1 (декабрь 2018 г.), я не могу найти никаких доказательств того, что Хранилище событий поддерживает скоординированную запись в несколько потоков событий.
Предполагая, что ваша модель данных правильная, и что две учетные записи действительно принадлежат разным потокам: это означает, что у вас не жесткая граница транзакции для управления, а процесс.
Аналогия: рассмотрим банковский перевод. Как вы думаете, мы переводим деньги со счета в Bank of America на счет в Wells Fargo за одну транзакцию?
Более обычным подходом будет управление процесс передачи в собственном потоке, который отслеживает все, что произошло. Изменения в учетных записях по-прежнему происходят в их собственных потоках, изолированно друг от друга. Поток процесса отвечает за оркестровку - проверку подтверждений от других элементов.
Счастливый путь потока может выглядеть примерно так:
- Записать запрос на перевод в потоке процесса
- Записать снятие средств в потоке счета A
[ 116] Запишите подтверждение снятия средств в потоке процесса- . Запись депонирования средств в потоке счета B
- . Запишите подтверждение . депозит средств в потоке процесса
- Запишите процесс, завершенный в потоке процесса
Но если вам действительно нужно изменить две учетные записи в в то же время , тогда вам нужно, чтобы они управлялись одним и тем же грубозернистым замком . Так как хранилище событий гарантирует блокировку только на уровне потока, вам потребуется пересмотреть модель данных.
Я попробовал следующий код также - который приводит к тому же результату (т.е. и lblTitle и lblDescription являются пустыми)
protected void Page_Load(object sender, EventArgs e)
{
if (_ErrorMessage != null)
{
lblTitle.Text = _ErrorMessage.Message;
lblDescription.Text = _ErrorMessage.Description;
}
}
, у меня было понимание, что функция LoadControl принесла управление, которое это загружает до текущего 'состояния' страницы, на которую это включается в. следовательно Init, Page_Load и т.д. все выполняются как часть вызова LoadControl.
Интересно это (оставшееся без ответа) сообщение форумов asp.net показывает ту же проблему, как я испытываю.
Дополнительно - Из MSDN:
при загрузке управления в контейнерное управление контейнер генерирует все события добавленного управления, пока он не поймал до текущего события. Однако добавленное управление не догоняет обработку возвращенных данных. Чтобы добавленное управление участвовало в обработке возвращенных данных, включая проверку, управление должно быть добавлено в событии Init, а не в событии Load.
Поэтому не был должен LoadControl правильно initalise управление?
РЕДАКТИРОВАНИЕ:
хорошо, таким образом, я отвечаю на свой собственный вопрос здесь..
я нашел версию, которой отвечают, сообщения форума, которое я связал с вышеупомянутым Здесь
По существу, ответ - то, что эти LoadControl( type, params )
не может вывести 'страницу infront' ascx для парсинга, и следовательно это не беспокоит initalising ни одни из средств управления. Когда Вы используете LoadControl( "ascx path" )
версия, ей дают страницу infront и следовательно делает весь парсинг и initalision.
Так, таким образом, я должен изменить код, который является initalising управление и разделяет его на отдельные части. Т.е.
Control ErrorCntrl = LoadControl("ErrorDisplay.ascx");
ErrorCntrl.ID = SomeID;
(ErrorCntrl as ErrorDisplay).SetErrorMessage = MessageDetail;
divErrorContainer.Controls.Add(ErrorCntrl);
И это должно работать хорошо.. Это не столь аккуратно как моя предыдущая попытка, но по крайней мере это будет работать.
я все еще открыт для предложений для улучшения вышеупомянутого.
Аплодисменты
Соглашаясь с Mitchel, необходимо смочь поместить page_load в сам код управления, который стрелял бы после того, как средства управления абсолютно доступны.
Хорошо там всегда добавляет Ваше собственное событие загрузки и называет его после того, как Вы имеете, выполнил конструктора и добавил управление к странице, но это не является существенно иным, чем, что Вы имеете, хотя я мог бы выбрать его по причинам стиля.
Glad Вы нашли ответ на свою проблему!
В жизненный цикл страницы asp.net Ваши средства управления не полностью добавляются в предварительном рендеринге, почему Вы только не загружаете значения в page_load?