Source

Iteration Zero / src / Core / DataContext.cs

using FluentNHibernate.Cfg;
using NHibernate;
using NHibernate.Cfg;

namespace Core
{
    public class DataContext
    {
        private static ISessionFactory _sessionFactory;
        private static bool _startupComplete = false;

        private static readonly object _locker =
            new object();

        public static ISession GetSession()
        {
            EnsureStartup();
            ISession session = _sessionFactory.OpenSession();
            session.BeginTransaction();
            return session;
        }

        public static void EnsureStartup()
        {
            if (!_startupComplete)
            {
                lock (_locker)
                {
                    if (!_startupComplete)
                    {
                        InitializeSessionFactory();
                        _startupComplete = true;
                    }
                }
            }
        }

        private static void InitializeSessionFactory()
        {
            Configuration configuration =
                BuildConfiguration();
            _sessionFactory =
                configuration.BuildSessionFactory();
        }

        public static Configuration BuildConfiguration()
        {
            var config = new Configuration().Configure();
            var fluentConfig = Fluently.Configure(config);
            var loadedConfig = fluentConfig.Mappings(x =>
                x.FluentMappings.AddFromAssemblyOf<DataContext>());
            return loadedConfig.BuildConfiguration();
        }
    }
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.