private ViewDefinition GetViewDefinition(string tableName, ViewType?type = null) { if (type == null) { type = _lookupIdentifiers.Any(tableName.EndsWith) ? ViewType.Lookup : ViewType.Dimension; } var viewDefinition = new ViewDefinition(tableName, type.Value); viewDefinition.ColumnGroups.Add(new ViewDefinition.PrimaryKey { Columns = _analyzer.GetPrimaryKeyColumns(tableName) }); foreach (var relationship in _analyzer.GetForeignKeyRelationships(tableName)) { var keyType = ViewDefinition.ReferenceKeyType.DimensionReference; if (type == ViewType.Dimension || type == ViewType.Lookup) { keyType = ViewDefinition.ReferenceKeyType.Denormalized; } else if (_lookupIdentifiers.Any(relationship.PrimaryKeyTable.EndsWith)) { keyType = ViewDefinition.ReferenceKeyType.LookupReference; } viewDefinition.ColumnGroups.Add(new ViewDefinition.ReferenceKey { Relationship = relationship, KeyType = keyType, Columns = keyType == ViewDefinition.ReferenceKeyType.Denormalized ? _analyzer.GetNonKeyColumns(relationship.PrimaryKeyTable) : new List <SchemaAnalyzer.ColumnDefinition>() }); } ; viewDefinition.ColumnGroups.Add(new ViewDefinition.ColumnGroupDefinition { Columns = _analyzer.GetNonKeyColumns(tableName) }); return(viewDefinition); }