public void Apply_should_sort_unannotated_in_given_order()
        {
            var table = new DbTableMetadata();
            table.AddColumn("C");
            table.AddColumn("Id");

            ((IDbConvention<DbTableMetadata>)new ColumnOrderingConvention()).Apply(table, new DbDatabaseMetadata());

            Assert.Equal(2, table.Columns.Count);
            Assert.Equal("C", table.Columns.First().Name);
        }
        public void Apply_should_order_by_annotation_if_given()
        {
            var table = new DbTableMetadata();
            table.AddColumn("C").SetOrder(2);
            table.AddColumn("Id").SetOrder(1);

            ((IDbConvention<DbTableMetadata>)new ColumnOrderingConvention()).Apply(table, new DbDatabaseMetadata());

            Assert.Equal(2, table.Columns.Count);
            Assert.Equal("Id", table.Columns.First().Name);
        }
        public void AddColumn_should_set_properties_and_add_to_columns()
        {
            var table = new DbTableMetadata();

            var tableColumn = table.AddColumn("Foo");

            Assert.NotNull(tableColumn);
            Assert.Equal("Foo", tableColumn.Name);
            Assert.True(table.Columns.Contains(tableColumn));
        }
        public static DbTableColumnMetadata IncludeColumn(DbTableMetadata table, string columnName, bool useExisting)
        {
            Contract.Requires(table != null);
            Contract.Requires(columnName != null);

            var existingColumn =
                table.Columns.SingleOrDefault(c => string.Equals(c.Name, columnName, StringComparison.Ordinal));
            DbTableColumnMetadata column = null;
            if (existingColumn == null)
            {
                column = table.AddColumn(columnName);
            }
            else if (!useExisting
                     && !existingColumn.IsPrimaryKeyColumn)
            {
                column = table.AddColumn(columnName);
            }
            else
            {
                column = existingColumn;
            }

            return AddColumn(table, column);
        }
        private void GenerateIndependentForeignKeyColumns(
            EdmEntityType principalEntityType,
            EdmEntityType dependentEntityType,
            DbAssociationSetMapping associationSetMapping,
            DbAssociationEndMapping associationEndMapping,
            DbTableMetadata dependentTable,
            DbForeignKeyConstraintMetadata foreignKeyConstraint,
            bool isPrimaryKeyColumn,
            EdmNavigationProperty principalNavigationProperty)
        {
            //Contract.Requires(principalEntityType != null);
            //Contract.Requires(associationEndMapping != null);
            //Contract.Requires(dependentTable != null);
            //Contract.Requires(foreignKeyConstraint != null);

            foreach (var property in principalEntityType.KeyProperties())
            {
                var foreignKeyColumn
                    = dependentTable.AddColumn(
                        ((principalNavigationProperty != null)
                             ? principalNavigationProperty.Name
                             : principalEntityType.Name)
                        + "_" + property.Name);

                MapTableColumn(property, foreignKeyColumn, false, isPrimaryKeyColumn);

                foreignKeyColumn.IsNullable = (associationEndMapping.AssociationEnd.IsOptional()
                                               ||
                                               (associationEndMapping.AssociationEnd.IsRequired()
                                                && dependentEntityType.BaseType != null));
                foreignKeyColumn.StoreGeneratedPattern = DbStoreGeneratedPattern.None;

                foreignKeyConstraint.DependentColumns.Add(foreignKeyColumn);

                associationEndMapping.PropertyMappings.Add(
                    new DbEdmPropertyMapping
                        {
                            Column = foreignKeyColumn,
                            PropertyPath = new[] { property }
                        });

                if (foreignKeyColumn.IsNullable)
                {
                    associationSetMapping.ColumnConditions.Add(
                        new DbColumnCondition
                            {
                                Column = foreignKeyColumn,
                                IsNull = false
                            });
                }
            }
        }