Ошибка транзакции с Microsoft Lightswitch с использованием базы данных Oracle - PullRequest
2 голосов
/ 02 августа 2011

Я делаю очень простой проект Lightswitch, который подключится к моей таблице в базе данных Oracle 11g. Я добавляю в проект редактируемую сетку и строю проект. Когда я пытаюсь добавить или изменить данные в сетке, я получаю следующую ошибку:

Произошла ошибка при запуске транзакции в соединении провайдера. Подробности смотрите во внутреннем исключении.

Внутреннее исключение: Соединение уже является частью локальной или распределенной транзакции

В проекте нет пользовательского кода. Я считал, что Lightswitch должен был очень легко создавать формы поверх данных. Я искал помощи, но пока ничего.

Ответы [ 3 ]

1 голос
/ 06 октября 2011

// Вам нужно очистить, иначе txn не удастся ..

 partial void SaveChanges_Executed()
{
    tx.Complete();
    tx.Dispose();
}
1 голос
/ 14 января 2012

Если вы получили эту ошибку, «Внутреннее сообщение об исключении: соединение уже является частью локальной или распределенной транзакции»

, вы можете решить эту проблему, следуя второму сообщению BScholz, https://forums.oracle.com/forums/thread.jspa?threadID=2263095

По сути, вам нужно реализовать SaveChanges_Excuting и SaveChanges_Excuted для источника данных Oracle.

  1. Переключиться на «Просмотр файлов» (LightSwitch по умолчанию отображает «Логическое представление»).
  2. Добавьте ссылку на «System.Transactions» в проекте сервера.
  3. Вернитесь к «Логическому представлению»
  4. Щелкните правой кнопкой мыши Имя источника данных и нажмите «Просмотр кода», чтобы редактировать частичный класс.
  5. Скопируйте и вставьте следующий код:

    private TransactionScope _tscope;
    
    partial void SaveChanges_Executing()
    {
        _tscope = new TransactionScope(TransactionScopeOption.Required,
        new TransactionOptions
        {
            IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted
        });
    }
    
    partial void SaveChanges_Executed()
    {
        _tscope.Complete();
        _tscope.Dispose();
    }
    
0 голосов
/ 06 сентября 2011

Попробуйте добавить этот код в свой код источника данных.(щелкните правой кнопкой мыши на источнике данных Oracle и выберите «Просмотреть код»)

Убедитесь, что вы не забыли изменить имя класса в соответствии с вашим источником данных.

using System.Transactions;

namespace LightSwitchApplication
{
    public partial class <ChangeThisToYourClassName>
    {
        private TransactionScope tx;

        partial void SaveChanges_Executed()
        {
            tx.Complete();
        }

        partial void SaveChanges_Executing()
        {
            tx = new TransactionScope(TransactionScopeOption.Required, 
                  new TransactionOptions { 
                      IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted
                  });
        } 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...