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.