Hello all,

I've just changed the implementations of the methods of my
repositories to encapsulate them all in a transaction:


public class Repository<TEntity> : IRepository<TEntity>
    where TEntity : BaseEntity<TEntity>
{
    public Repository(ISession session)
    {
        Session = session;
    }

    public ISession Session { get; set; }

    private static Type ConcreteType { get { return
typeof(TEntity); } }

    protected TResult Transact<TResult>(Func<TResult> func)
    {
        if (!Session.Transaction.IsActive)
        {
            // Wrap in transaction
            TResult result;

            using (var tx = Session.BeginTransaction())
            {
                result = func.Invoke();
                tx.Commit();
            }
            return result;
        }
        // Don't wrap;
        return func.Invoke();
    }

    protected void Transact(Action action)
    {
        Transact(() =>
                    {
                        action.Invoke();
                        return false;
                    });
    }
}

I use this like that:

public IEnumerable<Strategy> AllStrategiesSortedByName(StrategyType
type)
{
    return Transact(() => Session.CreateQuery("from Strategy s where
s.Type = :strategyType order by s.Name")
                                .SetParameter("strategyType", type)
                                .Enumerable<Strategy>());
}

With the above query, I have this exception:

NHibernate.TransactionException: Commit failed with SQL exception

InnerException : System.Data.SQLite.SQLiteException: SQLite error -
cannot commit transaction - SQL statements in progress

If I remove the transaction, all runs fine. If I replace the HQL query
with a QueryOver query, it works fine too.

Would you have any ideas?

Thanks in advance

Mike

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to