public static void SetDefaultDiscriminator(
            this DbEntityTypeMappingFragment entityTypeMappingFragment, DbTableColumnMetadata discriminator)
        {
            //Contract.Requires(entityTypeMappingFragment != null);

            entityTypeMappingFragment.Annotations.SetAnnotation(DefaultDiscriminatorAnnotation, discriminator);
        }
コード例 #2
0
        public static DbTableColumnMetadata IncludeColumn(
            DbTableMetadata table, DbTableColumnMetadata templateColumn, bool useExisting)
        {
            Contract.Requires(table != null);
            Contract.Requires(templateColumn != null);

            var existingColumn =
                table.Columns.SingleOrDefault(c => string.Equals(c.Name, templateColumn.Name, StringComparison.Ordinal));

            if (existingColumn == null)
            {
                templateColumn = templateColumn.Clone();
            }
            else if (!useExisting
                     && !existingColumn.IsPrimaryKeyColumn)
            {
                templateColumn = templateColumn.Clone();
            }
            else
            {
                templateColumn = existingColumn;
            }

            return AddColumn(table, templateColumn);
        }
コード例 #3
0
        public void Initialize_should_initialize_facets()
        {
            var tableColumn = new DbTableColumnMetadata();

            tableColumn.Initialize();

            Assert.NotNull(tableColumn.Facets);
        }
コード例 #4
0
        public void Apply_should_put_key_columns_first()
        {
            var tableColumn = new DbTableColumnMetadata { TypeName = "Foo" };

            ((IDbConvention<DbTableColumnMetadata>)new ColumnTypeCasingConvention()).Apply(tableColumn, new DbDatabaseMetadata());

            Assert.Equal("foo", tableColumn.TypeName);
        }
コード例 #5
0
        private ColumnMapping FindOrCreateColumnMapping(DbTableColumnMetadata column)
        {
            var columnMapping = _columns.SingleOrDefault(c => c.Column == column);
            if (columnMapping == null)
            {
                columnMapping = new ColumnMapping(column);
                _columns.Add(columnMapping);
            }

            return columnMapping;
        }
コード例 #6
0
        public void Can_get_and_set_can_override_annotation()
        {
            var tableColumn = new DbTableColumnMetadata();

            tableColumn.SetAllowOverride(true);

            Assert.True(tableColumn.GetAllowOverride());

            tableColumn.SetAllowOverride(false);

            Assert.False(tableColumn.GetAllowOverride());
        }
コード例 #7
0
        public static DbTableColumnMetadata RemoveColumn(DbTableMetadata table, DbTableColumnMetadata column)
        {
            Contract.Requires(table != null);
            Contract.Requires(column != null);

            if (!column.IsPrimaryKeyColumn)
            {
                table.Columns.Remove(column);
            }

            return column;
        }
コード例 #8
0
        public static DbTableColumnMetadata AddColumn(this DbTableMetadata table, string name)
        {
            //Contract.Requires(table != null);
            //Contract.Requires(!string.IsNullOrWhiteSpace(name));

            var tableColumn = new DbTableColumnMetadata
                {
                    Name = table.Columns.UniquifyName(name)
                }.Initialize();

            tableColumn.SetPreferredName(name);

            table.Columns.Add(tableColumn);

            return tableColumn;
        }
        public void Configure_should_rename_columns_when_right_keys_configured()
        {
            var database = new DbDatabaseMetadata().Initialize();
            var associationSetMapping = new DbAssociationSetMapping().Initialize();
            var column = new DbTableColumnMetadata();
            associationSetMapping.TargetEndMapping.PropertyMappings.Add(new DbEdmPropertyMapping { Column = column });

            var manyToManyAssociationMappingConfiguration
                = new ManyToManyAssociationMappingConfiguration();

            manyToManyAssociationMappingConfiguration.MapRightKey("NewName");

            manyToManyAssociationMappingConfiguration.Configure(associationSetMapping, database);

            Assert.Equal("NewName", column.Name);
        }
コード例 #10
0
        private static DbTableColumnMetadata AddColumn(DbTableMetadata table, DbTableColumnMetadata column)
        {
            Contract.Requires(table != null);
            Contract.Requires(column != null);

            if (!table.Columns.Contains(column))
            {
                var configuration = column.GetConfiguration() as PrimitivePropertyConfiguration;

                if ((configuration == null)
                    || string.IsNullOrWhiteSpace(configuration.ColumnName))
                {
                    var preferredName = column.GetPreferredName() ?? column.Name;
                    column.SetUnpreferredUniqueName(column.Name);
                    column.Name = table.Columns.UniquifyName(preferredName);
                }

                table.Columns.Add(column);
            }

            return column;
        }
コード例 #11
0
        protected void MapTableColumn(
            EdmProperty property,
            DbTableColumnMetadata tableColumnMetadata,
            bool isInstancePropertyOnDerivedType,
            bool isKeyProperty = false)
        {
            Contract.Requires(property != null);
            Contract.Requires(tableColumnMetadata != null);

            var storeTypeUsage = _providerManifest.GetStoreType(GetEdmTypeUsage(property.PropertyType));

            tableColumnMetadata.TypeName = storeTypeUsage.EdmType.Name;
            tableColumnMetadata.IsPrimaryKeyColumn = isKeyProperty;

            if (isInstancePropertyOnDerivedType)
            {
                tableColumnMetadata.IsNullable = true;
            }
            else if (property.PropertyType.IsNullable != null)
            {
                tableColumnMetadata.IsNullable = property.PropertyType.IsNullable.Value;
            }

            if (tableColumnMetadata.IsPrimaryKeyColumn)
            {
                tableColumnMetadata.IsNullable = false;
            }

            var storeGeneratedPattern = property.GetStoreGeneratedPattern();

            if (storeGeneratedPattern != null)
            {
                tableColumnMetadata.StoreGeneratedPattern = storeGeneratedPattern.Value;
            }

            MapPrimitivePropertyFacets(
                property.PropertyType.PrimitiveTypeFacets, tableColumnMetadata.Facets, storeTypeUsage);
        }
コード例 #12
0
        internal void WritePropertyElementHeader(DbTableColumnMetadata property)
        {
            _xmlWriter.WriteStartElement(SsdlConstants.Element_Property);
            _xmlWriter.WriteAttributeString(SsdlConstants.Attribute_Name, property.Name);
            _xmlWriter.WriteAttributeString(SsdlConstants.Attribute_Type, property.TypeName);

            WritePropertyTypeFacets(property);
        }
        public static void AddNullabilityCondition(
            this DbEntityTypeMappingFragment entityTypeMapppingFragment,
            DbTableColumnMetadata column,
            bool isNull)
        {
            //Contract.Requires(entityTypeMapppingFragment != null);
            //Contract.Requires(column != null);

            entityTypeMapppingFragment
                .ColumnConditions
                .Add(
                    new DbColumnCondition
                        {
                            Column = column,
                            IsNull = isNull
                        });
        }
コード例 #14
0
 private void WritePropertyTypeFacets(DbTableColumnMetadata property)
 {
     if (property.Facets != null)
     {
         foreach (var facet in GetEnumerableFacetValueFromPrimitiveTypeFacets(property.Facets))
         {
             _xmlWriter.WriteAttributeString(facet.Key, facet.Value);
         }
     }
     if (property.StoreGeneratedPattern
         != DbStoreGeneratedPattern.None)
     {
         _xmlWriter.WriteAttributeString(
             SsdlConstants.Attribute_StoreGeneratedPattern,
             property.StoreGeneratedPattern == DbStoreGeneratedPattern.Computed
                 ? CsdlConstants.Value_Computed
                 : CsdlConstants.Value_Identity);
     }
     _xmlWriter.WriteAttributeString(
         SsdlConstants.Attribute_Nullable, GetLowerCaseStringFromBoolValue(property.IsNullable));
 }
コード例 #15
0
 private static IEnumerable<DbForeignKeyConstraintMetadata> FindAllForeignKeyConstraintsForColumn(
     DbTableMetadata fromTable, DbTableMetadata toTable, DbTableColumnMetadata column)
 {
     return fromTable
         .ForeignKeyConstraints
         .Where(
             fk => fk.DependentColumns.Contains(column) &&
                   fk.DependentColumns.All(
                       c => toTable.Columns.Any(
                           nc =>
                           string.Equals(nc.Name, c.Name, StringComparison.Ordinal)
                           || string.Equals(nc.GetUnpreferredUniqueName(), c.Name, StringComparison.Ordinal))));
 }
コード例 #16
0
 private void WriteScalarPropertyElement(EdmProperty property, DbTableColumnMetadata column)
 {
     _xmlWriter.WriteStartElement(MslConstants.Element_ScalarProperty);
     _xmlWriter.WriteAttributeString(MslConstants.Attribute_Name, property.Name);
     _xmlWriter.WriteAttributeString(MslConstants.Attribute_ColumnName, column.Name);
     _xmlWriter.WriteEndElement();
 }
コード例 #17
0
        public static DbTableColumnMetadata MoveColumnAndAnyConstraints(
            DbTableMetadata fromTable, DbTableMetadata toTable, DbTableColumnMetadata column, bool useExisting)
        {
            Contract.Requires(fromTable != null);
            Contract.Requires(toTable != null);
            Contract.Requires(column != null);

            var movedColumn = column;

            if (fromTable != toTable)
            {
                movedColumn = TablePrimitiveOperations.IncludeColumn(toTable, column, useExisting);
                TablePrimitiveOperations.RemoveColumn(fromTable, column);
                ForeignKeyPrimitiveOperations.MoveAllForeignKeyConstraintsForColumn(fromTable, toTable, column);
            }

            return movedColumn;
        }
コード例 #18
0
 internal void WriteDelaredKeyPropertyRefElement(DbTableColumnMetadata property)
 {
     _xmlWriter.WriteStartElement(SsdlConstants.Element_PropertyRef);
     _xmlWriter.WriteAttributeString(SsdlConstants.Attribute_Name, property.Name);
     _xmlWriter.WriteEndElement();
 }
コード例 #19
0
 protected virtual void VisitDbTableColumnMetadata(DbTableColumnMetadata item)
 {
     VisitDbColumnMetadata(item);
 }
コード例 #20
0
        public static void RemoveAllForeignKeyConstraintsForColumn(DbTableMetadata table, DbTableColumnMetadata column)
        {
            Contract.Requires(table != null);
            Contract.Requires(column != null);

            table.ForeignKeyConstraints
                .Where(fk => fk.DependentColumns.Contains(column))
                .ToArray()
                .Each(fk => table.ForeignKeyConstraints.Remove(fk));
        }
コード例 #21
0
        /// <summary>
        ///     Move any FK constraints that are now completely in newTable and used to refer to oldColumn
        /// </summary>
        public static void MoveAllForeignKeyConstraintsForColumn(
            DbTableMetadata fromTable, DbTableMetadata toTable, DbTableColumnMetadata column)
        {
            Contract.Requires(fromTable != null);
            Contract.Requires(toTable != null);
            Contract.Requires(column != null);

            FindAllForeignKeyConstraintsForColumn(fromTable, toTable, column)
                .ToArray()
                .Each(fk => { MoveForeignKeyConstraint(fromTable, toTable, fk); });
        }
コード例 #22
0
        public static void CopyAllForeignKeyConstraintsForColumn(
            DbDatabaseMetadata database, DbTableMetadata fromTable, DbTableMetadata toTable,
            DbTableColumnMetadata column)
        {
            Contract.Requires(fromTable != null);
            Contract.Requires(toTable != null);
            Contract.Requires(column != null);

            FindAllForeignKeyConstraintsForColumn(fromTable, toTable, column)
                .ToArray()
                .Each(fk => CopyForeignKeyConstraint(database, toTable, fk));
        }
        public static void AddDiscriminatorCondition(
            this DbEntityTypeMappingFragment entityTypeMapppingFragment,
            DbTableColumnMetadata discriminatorColumn,
            object value)
        {
            //Contract.Requires(entityTypeMapppingFragment != null);
            //Contract.Requires(discriminatorColumn != null);
            //Contract.Requires(value != null);

            entityTypeMapppingFragment
                .ColumnConditions
                .Add(
                    new DbColumnCondition
                        {
                            Column = discriminatorColumn,
                            Value = value
                        });
        }
コード例 #24
0
        public static DbTableColumnMetadata CopyColumnAndAnyConstraints(
            DbDatabaseMetadata database,
            DbTableMetadata fromTable,
            DbTableMetadata toTable,
            DbTableColumnMetadata column,
            bool useExisting,
            bool allowPkConstraintCopy)
        {
            Contract.Requires(fromTable != null);
            Contract.Requires(toTable != null);
            Contract.Requires(column != null);

            var movedColumn = column;

            if (fromTable != toTable)
            {
                movedColumn = TablePrimitiveOperations.IncludeColumn(toTable, column, useExisting);
                if (allowPkConstraintCopy || !movedColumn.IsPrimaryKeyColumn)
                {
                    ForeignKeyPrimitiveOperations.CopyAllForeignKeyConstraintsForColumn(
                        database, fromTable, toTable, column);
                }
            }

            return movedColumn;
        }
コード例 #25
0
        public void InitializeDefaultDiscriminatorColumn(DbTableColumnMetadata column)
        {
            var typeUsage =
                _providerManifest.GetStoreType(
                    TypeUsage.CreateStringTypeUsage(
                        PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String),
                        isUnicode: true,
                        isFixedLength: false,
                        maxLength: DiscriminatorLength));

            column.TypeName = typeUsage.EdmType.Name;
            column.Facets.MaxLength = DiscriminatorLength;

            column.IsNullable = false;
        }
コード例 #26
0
 protected override void VisitDbTableColumnMetadata(DbTableColumnMetadata item)
 {
     _schemaWriter.WritePropertyElementHeader(item);
     base.VisitDbTableColumnMetadata(item);
     _schemaWriter.WriteEndElement();
 }
コード例 #27
0
 public ColumnMapping(DbTableColumnMetadata column)
 {
     //Contract.Requires(column != null);
     _column = column;
     _propertyMappings = new List<PropertyMappingSpecification>();
 }