я следующий метод:Null SqlCeTransaction в случайные моменты времени
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
имеет значение null, когда он переходит к шагу фиксации. (Так как это происходит так случайным образом, я не смог узнать, является ли оно нулевым, когда оно получает транзакцию из соединения.)
Этот метод вызывается в двух местах. Один из них в то время, когда пользователь входит в мое приложение, а другой - когда пользователь неактивен на время (на основе таймера, который отключает ввод пользователя).
Я в тупике относительно того, что могло бы привести к тому, что могло бы быть SqlCeTransaction
(mTransaction
) когда-либо быть нулевым. (Справка ничего не говорит о возврате BeginTransaction null
.)
Я думаю, что вы правы. Мне нужно найти способ убедиться, что только один поток будет писать на время. – Vaccano
Возможно, вы можете передать транзакцию методам 'UpdateFromContract()' и 'DeleteFromContract()', тогда 'mTransaction' может быть локальным var. –