Null SqlCeTransaction в случайное время - PullRequest
0 голосов
/ 04 января 2011

У меня есть следующий метод:

public void SaveReferenceUpdates(ReferenceUpdatesDataContract updates)
{
    mTransaction = Connection.BeginTransaction();
    try
    {
        // Do all the updates to get the database inline with the contract.
        updates.UpdateFromContract();

        // Do all the deletes to get the database inline with the contract.
        updates.DeletesFromContract();

        try{mTransaction.Commit();}
        catch{throw;}
        mTransaction = null;
    }
    catch (Exception e)
    {
        mTransaction.Rollback();
        mTransaction = null;
        throw;
    }
}

(я вынул все свои операторы регистрации и свернул несколько методов, чтобы сделать это более читабельным.)

Странно то,иногда (очень очень случайно) mTransaction становится нулевым, когда он достигает шага фиксации.(Поскольку это происходит так случайно, я не смог увидеть, является ли он нулевым, когда он получает транзакцию из соединения.)

Этот метод вызывается в двух местах.Один из них - когда пользователь входит в мое приложение, а другой - когда пользователь какое-то время неактивен (на основе таймера, который отключает пользовательский ввод).

Я озадачен тем, что можетзаставить SqlCeTransaction (mTransaction) быть нулевым.(В справке ничего не говорится о возвращении BeginTransaction null.)

Ответы [ 2 ]

1 голос
/ 05 января 2011

Этот код вызывается из нескольких потоков?Это объяснило бы поведение (поток 2 начинает транзакцию непосредственно перед завершением потока 1 и устанавливает его в ноль).

0 голосов
/ 07 января 2011

Это может быть правильно.Попробуйте заблокировать (mTransaction) весь блок.это может замедлить работу программы, но, безусловно, будет безопасно.

...