示例#1
0
        protected override List <NavigationProperty> GetNavigationProperties(IDbObjectTraverse dbObject /*, IEnumerable<Table> tables*/)
        {
            List <NavigationProperty> navigationProperties = base.GetNavigationProperties(dbObject /*, tables*/);

            GetNavigationPropertiesMultipleRelationships(navigationProperties);
            return(navigationProperties);
        }
示例#2
0
        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);
            }
        }
示例#3
0
 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);
 }
示例#4
0
        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);
        }
示例#5
0
 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(")]");
 }
示例#6
0
        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);
                        }
                    }
                }
            }
        }
示例#7
0
        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);
            }
        }
示例#8
0
        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);
        }
示例#9
0
 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(")]");
 }
示例#10
0
 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(")]");
 }
示例#11
0
        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);
                    }
                }
            }
        }
示例#12
0
        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();
        }