/// <summary>
        /// Starts LiteDB database using a connection string for file system database
        /// </summary>
        /// <param name="connectionString">Connection string for LiteDB database</param>
        /// <param name="prefix">Collections prefix</param>
        private HangfireDbContext(string connectionString, string prefix = "hangfire")
        {
            _prefix = prefix;

            //UTC - LiteDB
            BsonMapper.Global.ResolveMember += (type, memberInfo, member) =>
            {
                if (member.DataType == typeof(DateTime?) || member.DataType == typeof(DateTime))
                {
                    member.Deserialize = (v, m) => v != null?v.AsDateTime.ToUniversalTime() : (DateTime?)null;

                    member.Serialize = (o, m) => new BsonValue(((DateTime?)o).HasValue ? ((DateTime?)o).Value.ToUniversalTime() : (DateTime?)null);
                }
            };

            //UTC - Internal JSON
            GlobalConfiguration.Configuration
            .UseSerializerSettings(new JsonSerializerSettings()
            {
                DateTimeZoneHandling = DateTimeZoneHandling.Utc,
                DateFormatHandling   = DateFormatHandling.IsoDateFormat,
                DateFormatString     = "yyyy-MM-dd HH:mm:ss.fff"
            });

            Repository = new LiteRepository(connectionString);

            Database = Repository.Database;

            ConnectionId = Guid.NewGuid().ToString();

            //Create Indexes
            StateDataKeyValue.EnsureIndex("Key");
            StateDataExpiringKeyValue.EnsureIndex("Key");
            StateDataHash.EnsureIndex("Key");
            StateDataList.EnsureIndex("Key");
            StateDataSet.EnsureIndex("Key");
            StateDataCounter.EnsureIndex("Key");
            StateDataAggregatedCounter.EnsureIndex("Key");
            DistributedLock.EnsureIndex("Resource", true);
            Job.EnsureIndex("Id");
            Job.EnsureIndex("StateName");
            Job.EnsureIndex("CreatedAt");
            Job.EnsureIndex("ExpireAt");
            Job.EnsureIndex("FetchedAt");
            JobQueue.EnsureIndex("JobId");
            JobQueue.EnsureIndex("Queue");
            JobQueue.EnsureIndex("FetchedAt");
        }