Closed
Description
Carlos Alberto Costa Beppler created an issue — 25th November 2010, 9:25:57:
When using Session.CreateMultiCriteria to execute batches of queries on an session witch FlushMode is Auto, the session is not flushing the pending changes to database.
This causes the same problem when using Future and FutureValue when used with ICriteria or IQueryOver because they use the MultiCriteria to do their jobs.
The problem can be reproduced with the following test case that inserts some entities an then try to query them using those APIs:
public void OutrosSalvarRecuperarNaMesmaSessao() { var original = new List<Aplicativo>() { new Aplicativo("Meu Aplicativo 1", "Aplicativo de Teste 1"), new Aplicativo("Meu Aplicativo 2", "Aplicativo de Teste 2"), new Aplicativo("Meu Aplicativo 3", "Aplicativo de Teste 3"), new Aplicativo("Meu Aplicativo 4", "Aplicativo de Teste 4") }; using (var session = SessionFactory.OpenSession()) { session.FlushMode = FlushMode.Auto; using (var transaction = session.BeginTransaction(IsolationLevel.ReadCommitted)) { foreach (var item in original) session.Save(item); // works //var query = QueryOver.Of<Aplicativo>().WhereRestrictionOn(a => a.Nome).IsIn(original.Select(o => o.Nome).ToArray()); //var fromDb = query.GetExecutableQueryOver(session).List(); // error => returns 0 items var query = QueryOver.Of<Aplicativo>().WhereRestrictionOn(a => a.Nome).IsIn(original.Select(o => o.Nome).ToArray()); var fromDb = query.GetExecutableQueryOver(session).Future().ToList(); // works //var query = DetachedCriteria.For<Aplicativo>().Add(Restrictions.InG("Nome", original.Select(o => o.Nome).ToArray())); //var fromDb = query.GetExecutableCriteria(session).List<Aplicativo>(); // error => returns 0 items //var query = DetachedCriteria.For<Aplicativo>().Add(Restrictions.InG("Nome", original.Select(o => o.Nome).ToArray())); //var fromDb = query.GetExecutableCriteria(session).Future<Aplicativo>().ToList(); // works //var query = session.CreateQuery("from Aplicativo a where a.Nome in (:nomes)").SetParameterList("nomes", original.Select(o => o.Nome).ToArray()); //var fromDb = query.List<Aplicativo>(); // works //var query = session.CreateQuery("from Aplicativo a where a.Nome in (:nomes)").SetParameterList("nomes", original.Select(o => o.Nome).ToArray()); //var fromDb = query.Future<Aplicativo>().ToList(); Assert.AreEqual(original.Count, fromDb.Count); } }The thests are been run using .NET Framework 4 and SQLite data provider.