コード例 #1
0
        private void _PopulateDimensions()
        {
            foreach (XPathNavigator dimNav in _tableNavigator.Select("rc:Columns/rc:Dimension", _vulcanConfig.NamespaceManager))
            {
                string dimName = dimNav.SelectSingleNode("@Name").Value;
                string factTableDimColumnName = dimNav.SelectSingleNode("@OutputName").Value;

                Message.Trace(Severity.Debug, "Mapping {0} to Dimension {1}", _name, dimName);

                if (DimensionHelper.DimDictionary.ContainsKey(dimName))
                {
                    TableHelper dimTableHelper =
                        new TableHelper(
                            dimName,
                            DimensionHelper.DimDictionary[dimName],
                            DimensionHelper.DimNavigatorDictionary[dimName].SelectSingleNode("rc:Table", _vulcanConfig.NamespaceManager));
                    Column dimKeyColumn = dimTableHelper.KeyColumn;

                    if (dimKeyColumn != null)
                    {
                        string constraintName = String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}_{1}_{2}", _name, dimName, factTableDimColumnName);

                        //Clone the Foreign Key Column and add it into our fact table.
                        Column tableColumn = (Column)dimKeyColumn.Clone();
                        tableColumn.Properties["Name"] = factTableDimColumnName;
                        this.Columns.Add(factTableDimColumnName, tableColumn);

                        ForeignKeyConstraint fkc = new ForeignKeyConstraint(constraintName, tableColumn, dimKeyColumn, dimName);
                        this.Constraints.Add(fkc);
                    }
                    else
                    {
                        dimTableHelper.TraceHelper();
                        Message.Trace(Severity.Error, "Dimension {0} has no key column.\n{1}", dimName, dimTableHelper.TableNavigator.OuterXml);
                    }
                }
                else
                {
                    Message.Trace(Severity.Error, "Dimension {0} cannot be found in the Dimensions Database.", dimName);
                }
            }
        }