Почему TransactionScope не работает с Платформой Объекта?

У вас есть две разные переменные; greaterThan5 и greaterThanFive.
У вас также есть оператор return, который будет работать только внутри функции.

Я считаю, что вы ищете что-то вроде следующего, который передает value в функцию, затем проверяет, больше ли value больше пяти или нет, устанавливая переменную на true внутри if условно, если это так. Затем функция возвращает правдивость переменной greaterThan5:

function greater(value) {
  let greaterThan5 = false;
  if (value > 5) {
    greaterThan5 = true;
  }
  return greaterThan5;
}

console.log(greater(10));
console.log(greater(3));

, которая может быть упрощена до простой однострочной 1110] заявление:

function greater(value) {
  return value > 5;
}

console.log(greater(10));
console.log(greater(3));

25
задан Community 23 May 2017 в 10:34
поделиться

7 ответов

Ваш MS-DTC (Координатор распределенных транзакций) по какой-то причине работает неправильно. MS-DTC используется для координации результатов транзакций по нескольким разнородным ресурсам, включая несколько SQL-соединений.

Посмотрите эту ссылку для получения дополнительной информации о происходящем.

В основном если вы убедитесь, что ваш MS-DTC работает и работает должным образом, у вас не должно возникнуть проблем с использованием 2-х соединений ADO.NET - будь то соединения на основе сущностей или любой другой тип.

19
ответ дан 28 November 2019 в 20:47
поделиться

Вы можете избежать использования распределенной транзакции, управляя своим собственным EntityConnection и передавая это EntityConnection в ObjectContext. , В противном случае проверьте это.

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=580828&SiteID=1&mode=1 http://forums.microsoft.com/msdn/showpost.aspx? postid = 113669 & siteid = 1 & sb = 0 & d = 1 & at = 7 & ft = 11 & tf = 0 & pageid = 1

EntityConnection conn = new EntityConnection(ConnectionString);

using (TransactionScope ts = new TransactionScope())
{
    using (DatabaseEntityModel o = new DatabaseEntityModel(conn))
    {
            var v = (from s in o.Advertiser select s).First();
            v.AcceptableLength = 1;
    }

    //-> By commenting out this section, it works
    using (DatabaseEntityModel o = new DatabaseEntityModel(conn))
    {
        //Exception on this next line
        var v = (from s1 in o.Advertiser select s1).First();
                v.AcceptableLength = 1;
    }
    //->

    ts.Complete();
}
19
ответ дан 28 November 2019 в 20:47
поделиться

Проблема заключается в том, что два разных DataContext эффективно создают два разных соединения.

В этом случае транзакция должна быть преобразована в распределенную транзакцию. Я предполагаю, что ваша проблема связана с настройкой MS DTC (Microsoft Distributed Transaction Coordinator) на сервере и / или клиенте. Если сервер не настроен для разрешения удаленных подключений, например, для MSDTC, вы встретите такого рода исключения.

Вы можете обратиться к этой странице MS , например, для устранения проблем MSDTC, и Google заполнен до краев со статьями / вопросами о форуме.

Теперь, это может быть что-то еще, но это действительно звучит так, как будто это проблема MSDTC.

1
ответ дан 28 November 2019 в 20:47
поделиться

Я написал ответ на другой вопрос о том, как диагностировать сбой транзакций MSDTC.

Этот ответ может оказаться полезным.

Как включить MSDTC на SQL Server?

0
ответ дан 28 November 2019 в 20:47
поделиться

Кстати, вы должны рассмотреть возможность использования SaveChanges (false) в сочетании с AcceptChanges () при использовании явных транзакций, подобных этой.

Таким образом, если что-то не работает в SaveChanges (false), ObjectContext не отменил ваши изменения, так что вы можете повторно применить позже или сделать некоторые записи об ошибках и т. Д.

См. Этот пост для получения дополнительной информации: http : //blogs.msdn.com/alexj/archive/2009/01/11/savechanges-false.aspx

Ура

Alex

3
ответ дан 28 November 2019 в 20:47
поделиться

Добавьте C: \ Windows \ msdtc.exe в исключения брандмауэра как на брандмауэре, так и на сервере. Я потратил целую вечность, пытаясь открыть определенные номера портов и диапазоны, но безрезультатно.

5
ответ дан 28 November 2019 в 20:47
поделиться

У меня действительно возникали похожие ошибки при использовании DTC при чтении сообщений из очереди MQ, их обработке и сохранении в базе данных SQL 2005 Express Edition. У меня недостаточно времени, чтобы до конца разобраться, была ли эта проблема вызвана выпуском 2005 г. или исключительно Express, но переход на стандарт 2008 г. привел к исчезновению этого конкретного поведения.

0
ответ дан 28 November 2019 в 20:47
поделиться
Другие вопросы по тегам:

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