/// <summary>
            /// Gets the name of the table in the database for the specified type,
            /// using the configured <see cref="ITableNameResolver"/>.
            /// </summary>
            /// <param name="type">The <see cref="Type"/> to get the table name for.</param>
            /// <param name="sqlBuilder">The SQL builder instance.</param>
            /// <returns>The table name in the database for <paramref name="type"/>.</returns>
            public static string Table(Type type, ISqlBuilder sqlBuilder)
            {
                var key = $"{sqlBuilder.GetType()}.{type}";

                if (!_typeTableNameCache.TryGetValue(key, out var name))
                {
                    name = sqlBuilder.QuoteIdentifier(TableNameResolver.ResolveTableName(type));
                    _typeTableNameCache.TryAdd(key, name);
                }

                LogReceived?.Invoke($"Resolved table name '{name}' for '{type}'");
                return(name);
            }
            private Mapping Get(Type type)
            {
                lock (_mappings)
                {
                    if (_mappings.TryGetValue(type, out var mapping))
                    {
                        return(mapping);
                    }

                    mapping = new Mapping
                    {
                        TableName = _tableNameResolver.ResolveTableName(type)
                    };
                    foreach (var p in GetScaffoldableProperties(type, true))
                    {
                        mapping.ColumnName.Add(p, _columnNameResolver.ResolveColumnName(p));
                    }

                    _mappings.AddOrUpdate(type, t => mapping, (t, m2) => mapping);

                    return(mapping);
                }
            }