public Database(Configuration configuration) { this.connectionString = configuration.ConnectionString; if (this.connectionString == null) { throw new Exception("Configuration.ConnectionString is missing"); } if (!this.connectionString.ToLowerInvariant().Contains(FullUriKey)) { throw new Exception("Configuration.ConnectionString has no FullUri"); } this.isInMemory = this.connectionString.ToLowerInvariant().Contains(InMemoryKey); if (this.isInMemory && !this.connectionString.ToLowerInvariant().Contains(SharedCacheKey)) { throw new Exception("Configuration.ConnectionString is in memory and FullUri has no \"?cache=shared\" parameter"); } if (this.isInMemory) { this.id = Guid.NewGuid().ToString("N").ToLowerInvariant(); } else { var connectionStringBuilder = new SQLiteConnectionStringBuilder(this.connectionString); var dataSource = connectionStringBuilder.FullUri; if (dataSource.Contains(UriQueySeparator)) { dataSource = dataSource.Substring(0, dataSource.IndexOf(UriQueySeparator, StringComparison.Ordinal)); } this.id = Path.GetFileName(dataSource); } this.objectFactory = configuration.ObjectFactory; if (this.objectFactory == null) { throw new Exception("Configuration.ObjectFactory is missing"); } this.roleCache = configuration.RoleCache ?? new RoleCache(); this.classCache = configuration.ClassCache ?? new ClassCache(); this.commandTimeout = configuration.CommandTimeout ?? 30; this.isolationLevel = configuration.IsolationLevel ?? IsolationLevel.Serializable; this.autoIncrement = configuration.AutoIncrement ?? false; this.mapping = new Mapping(this); if (this.isInMemory) { this.inMemoryConnection = new SQLiteConnection(this.ConnectionString); this.inMemoryConnection.Open(); } this.idSequence = IdSequence.GetOrCreate(this); }
public static IdSequence GetOrCreate(Database database) { lock (StaticLockObject) { IdSequence idSequence; if (!IdSequenceByPopulationId.TryGetValue(database.Id, out idSequence)) { idSequence = new IdSequence(); IdSequenceByPopulationId[database.Id] = idSequence; } return(idSequence); } }
public static IdSequence GetOrCreate(Database database) { lock (StaticLockObject) { IdSequence idSequence; if (!IdSequenceByPopulationId.TryGetValue(database.Id, out idSequence)) { idSequence = new IdSequence(); IdSequenceByPopulationId[database.Id] = idSequence; } return idSequence; } }