Пример #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DbClassData"/> class.
        /// </summary>
        /// <param name="tableName">Name of the table.</param>
        /// <param name="columns">The columns.</param>
        /// <param name="formatter">The formatter.</param>
        /// <param name="dataReaderReadMethods">The data reader read methods.</param>
        /// <param name="columnCollections">The column collections.</param>
        /// <param name="customTypes">The custom types.</param>
        public DbClassData(string tableName, IEnumerable <DbColumnInfo> columns, CodeFormatter formatter,
                           Dictionary <Type, string> dataReaderReadMethods, IEnumerable <ColumnCollection> columnCollections,
                           IEnumerable <CustomTypeMapping> customTypes)
        {
            const string tableNameWildcard = "*";

            _tableName             = tableName;
            _columns               = columns.OrderBy(x => x.Name, StringComparer.OrdinalIgnoreCase);
            _formatter             = formatter;
            _dataReaderReadMethods = dataReaderReadMethods;

            _className          = formatter.GetClassName(tableName);
            _interfaceName      = formatter.GetInterfaceName(tableName);
            _extensionClassName = ClassName + "DbExtensions";

            // Custom types filter
            _customTypes =
                customTypes.Where(
                    x =>
                    x.Columns.Count() > 0 &&
                    (x.Tables.Contains(TableName, StringComparer.OrdinalIgnoreCase) || x.Tables.Contains(tableNameWildcard))).
                ToCompact();

            // Column collections filter
            _columnCollections =
                columnCollections.Where(
                    x =>
                    x.Columns.Count() > 0 &&
                    (x.Tables.Contains(TableName, StringComparer.OrdinalIgnoreCase) || x.Tables.Contains(tableNameWildcard))).
                OrderBy(x => x.CollectionPropertyName).ToCompact();

            // Populate the external types dictionary
            foreach (var column in columns)
            {
                var    columnName = column.Name;
                string externalType;
                var    customType = _customTypes.FirstOrDefault(x => x.Columns.Contains(columnName, StringComparer.OrdinalIgnoreCase));
                if (customType != null)
                {
                    externalType = customType.CustomType;
                }
                else
                {
                    externalType = GetInternalType(column);
                }

                _externalTypes.Add(column, externalType);
            }

            // Populate the naming dictionaries
            foreach (var column in columns)
            {
                _privateNames.Add(column,
                                  formatter.GetFieldName(column.Name, MemberVisibilityLevel.Private, GetInternalType(column)));
                _publicNames.Add(column,
                                 formatter.GetFieldName(column.Name, MemberVisibilityLevel.Public, GetExternalType(column)));
                _parameterNames.Add(column, formatter.GetParameterName(column.Name, column.Type));
            }
        }
Пример #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DbClassData"/> class.
        /// </summary>
        /// <param name="tableName">Name of the table.</param>
        /// <param name="columns">The columns.</param>
        /// <param name="formatter">The formatter.</param>
        /// <param name="dataReaderReadMethods">The data reader read methods.</param>
        /// <param name="columnCollections">The column collections.</param>
        /// <param name="customTypes">The custom types.</param>
        public DbClassData(string tableName, IEnumerable<DbColumnInfo> columns, CodeFormatter formatter,
                           Dictionary<Type, string> dataReaderReadMethods, IEnumerable<ColumnCollection> columnCollections,
                           IEnumerable<CustomTypeMapping> customTypes)
        {
            const string tableNameWildcard = "*";

            _tableName = tableName;
            _columns = columns.OrderBy(x => x.Name, StringComparer.OrdinalIgnoreCase);
            _formatter = formatter;
            _dataReaderReadMethods = dataReaderReadMethods;

            _className = formatter.GetClassName(tableName);
            _interfaceName = formatter.GetInterfaceName(tableName);
            _extensionClassName = ClassName + "DbExtensions";

            // Custom types filter
            _customTypes =
                customTypes.Where(
                    x =>
                    x.Columns.Count() > 0 &&
                    (x.Tables.Contains(TableName, StringComparer.OrdinalIgnoreCase) || x.Tables.Contains(tableNameWildcard))).
                    ToCompact();

            // Column collections filter
            _columnCollections =
                columnCollections.Where(
                    x =>
                    x.Columns.Count() > 0 &&
                    (x.Tables.Contains(TableName, StringComparer.OrdinalIgnoreCase) || x.Tables.Contains(tableNameWildcard))).
                    OrderBy(x => x.CollectionPropertyName).ToCompact();

            // Populate the external types dictionary
            foreach (var column in columns)
            {
                var columnName = column.Name;
                string externalType;
                var customType = _customTypes.FirstOrDefault(x => x.Columns.Contains(columnName, StringComparer.OrdinalIgnoreCase));
                if (customType != null)
                    externalType = customType.CustomType;
                else
                    externalType = GetInternalType(column);

                _externalTypes.Add(column, externalType);
            }

            // Populate the naming dictionaries
            foreach (var column in columns)
            {
                _privateNames.Add(column,
                    formatter.GetFieldName(column.Name, MemberVisibilityLevel.Private, GetInternalType(column)));
                _publicNames.Add(column,
                    formatter.GetFieldName(column.Name, MemberVisibilityLevel.Public, GetExternalType(column)));
                _parameterNames.Add(column, formatter.GetParameterName(column.Name, column.Type));
            }
        }