Как выполнить два Контекста Платформы Объекта в TransactionScope без MSDTC?

Эта проблема не с готовностью восстанавливаема в простом примере здесь, но задавалась вопросом, есть ли у кого-либо опыт и подсказки, вот проблема:

  • использование Платформы Объекта
  • имейте много точек в приложении где (1) данные записаны в некоторую таблицу объекта, например, Клиента, (2) данные записаны в таблицу истории
  • оба из этих действий используют Платформу Объекта, ОДНАКО они используют различные контексты
  • эти действия должны быть оба в одной транзакции: т.е. если Вам не удается записать, другой не должен писать, и т.д.
  • Я могу перенести их с TransactionScope,

как это:

using (TransactionScope txScope = new TransactionScope()) {
    ...
}

но это дает мне:

Microsoft Distributed Transaction Coordinator (MSDTC) отключен для сетевых транзакций.

Наш администратор базы данных сказал мне, что MSDTC отключен по выбору и не может быть установлен.

Следовательно я вношу изменения, пытающиеся создать мой собственный EntityConnection с MetadataWorkspace с идеей, что каждый контекст будет использовать тот же EntityConnection. Однако это доказывает близкую невозможную попытку заставить это работать, например, в настоящее время я продолжаю получать вышеупомянутую ошибку даже при том, что теоретически оба контекста используют EntityConnection. Трудно понять, где/почему Платформа Объекта требует MSDTC, например.

Кто-либо шел по этой дороге прежде, имейте опыт или примеры кода для совместного использования?

16
задан ataravati 13 September 2018 в 21:05
поделиться

1 ответ

Что ж, проблема довольно простая.

Если вы используете sql server 2008, у вас не должно возникнуть этой проблемы, потому что у вас есть продвигаемая транзакция, и, поскольку .NET знает, что вы используете одно и то же хранилище постоянства (базу данных), он не будет продвигать его в DTC и фиксировать его как локальный . изучите продвигаемую транзакцию с помощью sql server 2008.

Насколько я знаю, Oracle работает над своим драйвером для поддержки продвигаемых транзакций, но я не знаю состояние, драйвер MS oracle не поддерживает его. {{1 }} http://www.oracle.com/technology/tech/windows/odpnet/col/odp.net_11.1.0.7.20_twp.pdf

Если вы используете драйвер, который не поддерживает продвигаемые транзакции .NET не может использовать локальную транзакцию для двух соединений. Вам следует изменить свою архитектуру или убедить администратора базы данных установить MSDTC.

13
ответ дан 30 November 2019 в 22:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: