public ISession GetOrCreateSession <TSessionContext>(Type type = null) where TSessionContext : ISessionContext
        {
            // var context = Ioc.Create(typeof(TSessionContext));
            var             _context       = Ioc.Create <ISessionContext>(typeof(TSessionContext));
            ISessionFactory sessionFactory = _sessionFactoryProvider.GetSessionFactory(_context.Name);

            string sessionKey       = _context.Name + "#";
            string connectionString = _context.GetConnectionString();

            if (!ActiveSessions.TryGetValue(sessionKey, out ISession session))
            {
                if (Options.IsTransactional == true)
                {
                    ActiveTransactionInfo activeTransactionInfo = ActiveTransactions.GetOrDefault(connectionString);
                    if (activeTransactionInfo == null)
                    {
                        session = DbConnection != null
                            ? sessionFactory.WithOptions().Connection(DbConnection).OpenSession()
                            : sessionFactory.OpenSession();

                        ITransaction transaction = Options.IsolationLevel.HasValue
                            ? session.BeginTransaction(Options.IsolationLevel.Value.ToSystemDataIsolationLevel())
                            : session.BeginTransaction();

                        activeTransactionInfo = new ActiveTransactionInfo(transaction, session.Connection, session);
                        ActiveTransactions[connectionString] = activeTransactionInfo;
                    }
                    else
                    {
                        session = activeTransactionInfo.StarterSession;
                        activeTransactionInfo.AttendedSessions.Add(session);
                    }
                }
                else
                {
                    session = DbConnection != null
                        ? sessionFactory.OpenSessionWithConnection(DbConnection)
                        : sessionFactory.OpenSession();
                }

                ActiveSessions[sessionKey] = session;
            }

            var filters = _context.Filters().ToList();

            foreach (var filter in filters)
            {
                var name       = filter.Name();
                var parameters = filter.Parameters();
                var _filter    = session.EnableFilter(name);
                foreach (var parameter in parameters)
                {
                    _filter.SetParameter(parameter.Key, parameter.Value);
                }
            }
            return(session);
        }
예제 #2
0
        public ISession GetOrCreateSession <TSessionContext>() where TSessionContext : StoveSessionContext
        {
            ISessionFactory sessionFactory = _sessionFactoryProvider.GetSessionFactory <TSessionContext>();
            var             connectionStringResolveArgs = new ConnectionStringResolveArgs();

            connectionStringResolveArgs["SessionContextType"] = typeof(TSessionContext);
            string connectionString = ResolveConnectionString(connectionStringResolveArgs);

            string sessionKey = typeof(TSessionContext).FullName + "#" + connectionString;

            if (!ActiveSessions.TryGetValue(sessionKey, out ISession session))
            {
                if (Options.IsTransactional == true)
                {
                    ActiveTransactionInfo activeTransactionInfo = ActiveTransactions.GetOrDefault(connectionString);
                    if (activeTransactionInfo == null)
                    {
                        session = DbConnection != null
                            ? sessionFactory.WithOptions().Connection(DbConnection).OpenSession()
                            : sessionFactory.OpenSession();

                        ITransaction transaction = Options.IsolationLevel.HasValue
                            ? session.BeginTransaction(Options.IsolationLevel.Value.ToSystemDataIsolationLevel())
                            : session.BeginTransaction();

                        activeTransactionInfo = new ActiveTransactionInfo(transaction, session.Connection, session);
                        ActiveTransactions[connectionString] = activeTransactionInfo;
                    }
                    else
                    {
                        session = activeTransactionInfo.StarterSession;

                        activeTransactionInfo.AttendedSessions.Add(session);
                    }
                }
                else
                {
                    session = DbConnection != null
                        ? sessionFactory.OpenSessionWithConnection(DbConnection)
                        : sessionFactory.OpenSession();
                }

                ActiveSessions[sessionKey] = session;
            }

            return(session);
        }
 public ISessionFactory GetSessionFactory()
 {
     return(_sessionFactory.GetSessionFactory());
 }
예제 #4
0
 public void Should_OpenSession_Work()
 {
     using (ISession session = _sessionFactoryProvider.GetSessionFactory <PrimaryStoveSessionContext>().OpenSession())
     {
     }
 }
예제 #5
0
 public SessionProvider(ISessionFactoryProvider sessionFactoryProvider)
 {
     _sessionFactory = sessionFactoryProvider.GetSessionFactory();
 }