At which line in the following code should I commit my unit of work?
        Posted  
        
            by Pure.Krome
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Pure.Krome
        
        
        
        Published on 2010-03-23T13:39:50Z
        Indexed on 
            2010/03/29
            23:23 UTC
        
        
        Read the original article
        Hit count: 335
        
I have the following code which is in a transaction. I'm not sure where/when I should be commiting my unit of work.
On purpose, I've not mentioned what type of Respoistory i'm using - eg. Linq-To-Sql, Entity Framework 4, NHibernate, etc.
If someone knows where, can they please explain WHY they have said, where? (i'm trying to understand the pattern through example(s), as opposed to just getting my code to work).
Here's what i've got :-
using
(
    TransactionScope transactionScope =
        new TransactionScope
        (
            TransactionScopeOption.RequiresNew,
            new TransactionOptions
                { IsolationLevel = IsolationLevel.ReadUncommitted }
        )
)
{
    _logEntryRepository.InsertOrUpdate(logEntry);
    //_unitOfWork.Commit();  // Here, commit #1 ?
    // Now, if this log entry was a NewConnection or an LostConnection,
    // then we need to make sure we update the ConnectedClients.
    if (logEntry.EventType == EventType.NewConnection)
    {
        _connectedClientRepository.Insert(
            new ConnectedClient { LogEntryId = logEntry.LogEntryId });
        //_unitOfWork.Commit(); // Here, commit #2 ?
    }
    // A (PB) BanKick does _NOT_ register a lost connection,
    // so we need to make sure we handle those scenario's as a LostConnection.
    if (logEntry.EventType == EventType.LostConnection ||
        logEntry.EventType == EventType.BanKick)
    {
        _connectedClientRepository.Delete(
            logEntry.ClientName, logEntry.ClientIpAndPort);
        //_unitOfWork.Commit(); // Here, commit #3 ?
    }
    _unitOfWork.Commit(); // Here, commit #4 ?
    transactionScope.Complete();
}
        © Stack Overflow or respective owner