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); } } }