protected override List <NavigationProperty> GetNavigationProperties(IDbObjectTraverse dbObject /*, IEnumerable<Table> tables*/) { List <NavigationProperty> navigationProperties = base.GetNavigationProperties(dbObject /*, tables*/); GetNavigationPropertiesMultipleRelationships(navigationProperties); return(navigationProperties); }
protected virtual void WriteComplexTypes(IDbObjectTraverse dbObject, string namespaceOffset) { var complexTypes = complexTypeColumns.GroupBy(x => x.ComplexTypeName); foreach (var complexType in complexTypes) { WriteComplexType(complexType.Key, complexType, dbObject, namespaceOffset); } }
protected virtual bool IsCompositePrimaryKey(IDbObjectTraverse dbObject) { if (dbObject.Columns != null && dbObject.Columns.Count() > 0) { var primaryKeys = dbObject.Columns.Where(c => c.IsPrimaryKey); return(primaryKeys.Count() > 1); } return(false); }
protected override void WriteClassEnd(IDbObjectTraverse dbObject, string namespaceOffset) { if (IsEF && dbObject.DbType == DbType.Table && IsEFComplexType) { if (complexTypeColumns != null && complexTypeColumns.Count > 0) { WriteComplexTypes(dbObject, namespaceOffset); } } base.WriteClassEnd(dbObject, namespaceOffset); }
protected virtual void WriteEFTable(IDbObjectTraverse dbObject, string namespaceOffset) { pocoWriter.Write(namespaceOffset); pocoWriter.Write("["); pocoWriter.WriteUserType("Table"); pocoWriter.Write("("); pocoWriter.WriteString("\""); if (dbObject.Schema != "dbo") { pocoWriter.WriteString(dbObject.Schema); pocoWriter.WriteString("."); } pocoWriter.WriteString(dbObject.Name); pocoWriter.WriteString("\""); pocoWriter.WriteLine(")]"); }
protected override void WriteClassAttributes(IDbObjectTraverse dbObject, string namespaceOffset) { if (IsEF && dbObject.DbType == DbType.Table) { WriteEFTable(dbObject, namespaceOffset); if (IsEFDescription) { Table table = (Table)dbObject; if (table.HasExtendedProperties) { foreach (ExtendedProperty extendedProperty in table.ExtendedProperties) { WriteEFDescription(extendedProperty.Description, false, namespaceOffset); } } } } }
protected override void WriteColumn(IColumn column, bool isLastColumn, IDbObjectTraverse dbObject, string namespaceOffset) { if (IsEF && dbObject.DbType == DbType.Table && IsEFComplexType) { string columnName = column.ColumnName.Trim(); int index = columnName.IndexOf('_'); if (index != -1 && index != 0 && index != columnName.Length - 1) { string complexTypeName = NameHelper.CleanName(columnName.Substring(0, index)); string complexTypeColumnName = columnName.Substring(index + 1); if (complexTypeNames == null) { complexTypeNames = new List <string>(); } if (complexTypeNames.Contains(complexTypeName) == false) { ComplexType complexType = new ComplexType(complexTypeName, (TableColumn)column); base.WriteColumn(complexType, isLastColumn, dbObject, namespaceOffset); complexTypeNames.Add(complexTypeName); } ComplexTypeColumn complexTypeColumn = new ComplexTypeColumn(complexTypeName, complexTypeColumnName, (TableColumn)column); if (complexTypeColumns == null) { complexTypeColumns = new List <ComplexTypeColumn>(); } complexTypeColumns.Add(complexTypeColumn); } else { base.WriteColumn(column, isLastColumn, dbObject, namespaceOffset); } } else { base.WriteColumn(column, isLastColumn, dbObject, namespaceOffset); } }
protected virtual void WriteComplexType(string complexTypeName, IEnumerable <ComplexTypeColumn> complexTypeColumns, IDbObjectTraverse dbObject, string namespaceOffset) { pocoWriter.WriteLine(); // Class Attribute pocoWriter.Write(namespaceOffset); pocoWriter.Write(Tab); pocoWriter.Write("["); pocoWriter.WriteUserType("ComplexType"); pocoWriter.WriteLine("]"); namespaceOffset += Tab; // Class Start base.WriteClassStart(complexTypeName, dbObject, namespaceOffset); // Columns var columns = complexTypeColumns.OrderBy <IColumn, int>(c => c.ColumnOrdinal ?? 0); var lastColumn = columns.Last(); foreach (IColumn column in columns) { base.WriteColumn(column, column == lastColumn, dbObject, namespaceOffset); } // Class End base.WriteClassEnd(dbObject, namespaceOffset); }
protected virtual void WriteNavigationPropertyInversePropertyAttribute(NavigationProperty navigationProperty, IDbObjectTraverse dbObject, string namespaceOffset) { pocoWriter.Write(namespaceOffset); pocoWriter.Write(Tab); pocoWriter.Write("["); pocoWriter.WriteUserType("InverseProperty"); pocoWriter.Write("("); pocoWriter.WriteString("\""); pocoWriter.WriteString(navigationProperty.InverseProperty.ToString()); pocoWriter.WriteString("\""); pocoWriter.WriteLine(")]"); }
protected virtual void WriteNavigationPropertyForeignKeyAttribute(NavigationProperty navigationProperty, IDbObjectTraverse dbObject, string namespaceOffset) { pocoWriter.Write(namespaceOffset); pocoWriter.Write(Tab); pocoWriter.Write("["); pocoWriter.WriteUserType("ForeignKey"); pocoWriter.Write("("); pocoWriter.WriteString("\""); if (navigationProperty.HasMultipleRelationships) { pocoWriter.WriteString(navigationProperty.ForeignKey.Foreign_Column); } else { pocoWriter.WriteString(navigationProperty.ForeignKey.Primary_Column); } pocoWriter.WriteString("\""); pocoWriter.WriteLine(")]"); }
protected override void WriteNavigationPropertyAttributes(NavigationProperty navigationProperty, IDbObjectTraverse dbObject, string namespaceOffset) { if (IsEF && IsEFForeignKey) { if (IsNavigableObject(dbObject)) { if (navigationProperty.IsRefFrom) { WriteNavigationPropertyForeignKeyAttribute(navigationProperty, dbObject, namespaceOffset); } if (navigationProperty.IsRefFrom == false && navigationProperty.HasMultipleRelationships) { WriteNavigationPropertyInversePropertyAttribute(navigationProperty, dbObject, namespaceOffset); } } } }
protected override void WriteColumnAttributes(IColumn column, string cleanColumnName, IDbObjectTraverse dbObject, string namespaceOffset) { if (IsEF && dbObject.DbType == DbType.Table) { // Primary Key bool isCompositePrimaryKey = IsCompositePrimaryKey(dbObject as IDbColumnTraverse); if (column.IsPrimaryKey) { if (isCompositePrimaryKey) { WriteEFCompositePrimaryKey(column.ColumnName, column.DataTypeName, ((TableColumn)column).PrimaryKey.Ordinal, namespaceOffset); } else { WriteEFPrimaryKey(namespaceOffset); } } // Index if (IsEFIndex && column.HasIndexColumns) { TableColumn tableColumn = (TableColumn)column; foreach (IndexColumn indexColumn in tableColumn.IndexColumns.OrderBy(ic => ic.Name)) { bool isCompositeIndex = tableColumn.Table.TableColumns.Exists(tc => tc != tableColumn && tc.HasIndexColumns && tc.IndexColumns.Exists(ic => ic.Name == indexColumn.Name)); if (isCompositeIndex) { WriteEFCompositeIndex(indexColumn.Name, indexColumn.Is_Unique, indexColumn.Is_Clustered, indexColumn.Is_Descending, indexColumn.Ordinal, namespaceOffset); } else { WriteEFIndex(indexColumn.Name, indexColumn.Is_Unique, indexColumn.Is_Clustered, indexColumn.Is_Descending, namespaceOffset); } } } // Column if ((IsEFColumn && (column.IsPrimaryKey == false || isCompositePrimaryKey == false)) || (column.ColumnName != cleanColumnName)) { if (column is IComplexType == false) { WriteEFColumn(column.ColumnName, column.DataTypeName, namespaceOffset); } } // MaxLength if (column.DataTypeName == "binary" || column.DataTypeName == "char" || column.DataTypeName == "nchar" || column.DataTypeName == "nvarchar" || column.DataTypeName == "varbinary" || column.DataTypeName == "varchar") { WriteEFMaxLength(column.StringPrecision, namespaceOffset); } // StringLength if (IsEFStringLength) { if (column.DataTypeName == "binary" || column.DataTypeName == "char" || column.DataTypeName == "nchar" || column.DataTypeName == "nvarchar" || column.DataTypeName == "varbinary" || column.DataTypeName == "varchar") { if (column.StringPrecision > 0) { WriteEFStringLength(column.StringPrecision.Value, namespaceOffset); } } } // Timestamp if (column.DataTypeName == "timestamp") { WriteEFTimestamp(namespaceOffset); } // ConcurrencyCheck if (IsEFConcurrencyCheck) { if (column.DataTypeName == "timestamp" || column.DataTypeName == "rowversion") { WriteEFConcurrencyCheck(namespaceOffset); } } // DatabaseGenerated Identity if (column.IsIdentity == true) { WriteEFDatabaseGeneratedIdentity(namespaceOffset); } // DatabaseGenerated Computed if (column.IsComputed) { WriteEFDatabaseGeneratedComputed(namespaceOffset); } string display = null; if (IsEFRequiredWithErrorMessage || IsEFDisplay) { display = GetEFDisplay(column.ColumnName); } // Required if (IsEFRequired || IsEFRequiredWithErrorMessage) { if (column.IsNullable == false) { WriteEFRequired(display, namespaceOffset); } } // Display if (IsEFDisplay) { WriteEFDisplay(display, namespaceOffset); } // Description if (IsEFDescription) { TableColumn tableColumn = (TableColumn)column; if (tableColumn.HasExtendedProperties) { foreach (ExtendedProperty extendedProperty in tableColumn.ExtendedProperties) { WriteEFDescription(extendedProperty.Description, true, namespaceOffset); } } /*if (IsEFIndex && tableColumn.HasIndexColumns) * { * foreach (IndexColumn indexColumn in tableColumn.IndexColumns.OrderBy(ic => ic.Name)) * { * if (indexColumn.HasExtendedProperties) * { * foreach (ExtendedProperty extendedProperty in indexColumn.ExtendedProperties) * WriteEFDescription(extendedProperty.Description, true, namespaceOffset); * } * } * }*/ } } }
private void IterateDbObjects(IDbObjectTraverse dbObject, StringBuilder sb) { IPOCOIterator iterator = GetPOCOIterator(new IDbObjectTraverse[] { dbObject }, sb); iterator.Iterate(); }