public void SessionContextProviderTest()
 {
     using (var tr = new SessionContextProvider(this.SessionFactory.OpenSession))
     {
         INhPagedDAO dao = new EnterprisePagedDAO(tr);
         var res = dao.FindAll<Salesman>();
         Assert.IsTrue(res.Any());
     }
 }
        public void SessionCacheProviderTest()
        {
            using (var tr = new SessionCacheProvider(this.SessionFactory.OpenSession, false, false))
            {
                Assert.AreEqual(tr.KeyContext, SessionContextProvider.DefaultContext);

                INhPagedDAO dao = new EnterprisePagedDAO(tr);
                var res = dao.FindAll<Salesman>();
                Assert.IsTrue(res.Any());
            }
        }
        public void FailedSessionBinderProviderTest()
        {
            this.UnBindSession();

            ISessionBinderProvider provider = new SessionBinderProvider(this.SessionFactory.GetCurrentSession,
                                                                        this.LocalBindSession, this.LocalUnBindSession,
                                                                        () =>
                                                                        CurrentSessionContext.HasBind(
                                                                            this.SessionFactory));
            INhPagedDAO dao = new EnterprisePagedDAO(provider);
            dao.Load<Salesman>(1L);
        }
        public void SessionContextProviderWorngTest()
        {
            var tr = new SessionContextProvider(this.SessionFactory.OpenSession);

            INhPagedDAO dao;
            using (tr)
            {
                dao = new EnterprisePagedDAO(tr);
                var res = dao.FindAll<Salesman>();
                Assert.IsTrue(res.Any());
            }
            // an error must be thrown ..
            // 'cause 
            dao.FindAll<Student>();
        }
 public void Run2(int startIndex, int pageSize, StringBuilder buffer)
 {
     using (var sss = new SessionContextProvider(this.SessionFactory.OpenSession))
     {
         INhPagedDAO dao = new EnterprisePagedDAO(sss);
         var result = dao.GetPagedResult<Salesman>(startIndex, pageSize, salesman => salesman.ID > 0);
         Assert.IsNotNull(result.Result);
         lock (buffer)
         {
             buffer.AppendLine("Begin writing on buffer");
             foreach (var res in result.Result)
             {
                 buffer.AppendLine(res.ToString());
             }
         }
     }
 }
        public void SessionCacheProviderWorngTest()
        {
            var tr = new SessionCacheProvider(this.SessionFactory.OpenSession, false, false);

            INhPagedDAO dao;
            using (tr)
            {
                Assert.AreEqual(tr.KeyContext, SessionContextProvider.DefaultContext);

                dao = new EnterprisePagedDAO(tr);
                var res = dao.FindAll<Salesman>();
                Assert.IsTrue(res.Any());
            }
            // an error must be thrown ..
            // 'cause 
            dao.FindAll<Student>();
        }
        public void SessionCacheProviderTest2()
        {
            var tr = new SessionCacheProvider(this.SessionFactory.OpenSession, false, false);
            INhPagedDAO dao;

            using (null)
            {
                Assert.AreEqual(tr.KeyContext, SessionContextProvider.DefaultContext);

                dao = new EnterprisePagedDAO(tr);
                var res = dao.FindAll<Salesman>();
                Assert.IsTrue(res.Any());
            }

            // you can keep using the dao instance, because the its session provider didn't disposed.
            var res2 = dao.FindAll<Salesman>(n => n.ID < 10);
            Assert.IsTrue(res2 != null);
        }
        public void FailedSessionCacheProviderMultiSession()
        {
            INhPagedDAO dao;
            using (ISessionProvider provider = new SessionCacheProvider(this.SessionFactory.OpenSession, true, false))
            {
                dao = new EnterprisePagedDAO(provider);

                provider.BeginTransaction("first");
                var res1 = dao.Load<Salesman>(1L, LockMode.Read);

                Assert.IsTrue(dao.IsCached(res1));          /* res1 is associated into the current session, so it's cached */
                provider.CommitTransaction();
                Assert.IsFalse(dao.IsCached(res1));         /* after commit the current session was closed and unreferenced, so res1 is not present in the new / next session to open. */

            }
            dao.FindAll<Salesman>(n => n.ID > 1);       /* throws an exception because the ISessionProvider was disposed. */
        }
        public void SessionCachedWithNewSessionAfterCommitOrRollback()
        {
            using (ISessionProvider provider = new SessionCacheProvider(this.SessionFactory.OpenSession, true, true))
            {
                INhPagedDAO dao = new EnterprisePagedDAO(provider);

                provider.BeginTransaction("first");
                var res1 = dao.Load<Salesman>(1L, LockMode.Read);

                Assert.IsTrue(dao.IsCached(res1));           /* res1 is associated into the current session, so it's cached */
                provider.CommitTransaction();
                Assert.IsFalse(dao.IsCached(res1));          /* after commit the current session was closed and unreferenced, so res1 is not present in the new / next session to open. */


                provider.BeginTransaction("second");
                var res2 = dao.Load<Salesman>(1L, LockMode.Read);
                Assert.IsTrue(dao.IsCached(res2));
                Assert.IsFalse(dao.IsCached(res1));
                provider.RollbackTransaction();
                Assert.IsFalse(dao.IsCached(res2));


                provider.BeginTransaction("third");
                var res3 = dao.Load<Salesman>(1L, LockMode.Read);

                Assert.AreNotSame(res1, res2);
                Assert.AreNotSame(res1, res3);
                Assert.AreNotSame(res2, res3);
                Assert.IsTrue(dao.IsCached(res3));
                provider.CommitTransaction();
                Assert.IsFalse(dao.IsCached(res3));
            }
        }
        public void SessionCachedWithSameSessionAfterCommit()
        {
            using (ISessionProvider provider = new SessionCacheProvider(this.SessionFactory.OpenSession, false, false))
            {
                INhPagedDAO dao = new EnterprisePagedDAO(provider);

                provider.BeginTransaction("first");
                var res1 = dao.Load<Salesman>(1L, LockMode.Read);

                Assert.IsTrue(dao.IsCached(res1));          /* res1 is associated into the current session, so it's cached */
                provider.CommitTransaction();
                Assert.IsTrue(dao.IsCached(res1));         /* after commit the current session was cached, so res1 is present into the same session. */


                provider.BeginTransaction("second");
                var res2 = dao.Load<Salesman>(1L, LockMode.Read);

                Assert.AreSame(res1, res2);
                Assert.IsTrue(dao.IsCached(res2));
                provider.CommitTransaction();
                Assert.IsTrue(dao.IsCached(res2));


                provider.BeginTransaction("third");
                var res3 = dao.Load<Salesman>(1L, LockMode.Read);

                Assert.AreSame(res1, res3);
                Assert.AreSame(res2, res3);
                Assert.IsTrue(dao.IsCached(res3));
                provider.CommitTransaction();
                Assert.IsTrue(dao.IsCached(res3));
            }
        }