private static void ConfigureDependentKeys(DbDatabaseMapping databaseMapping, DbProviderManifest providerManifest)
        {
            DebugCheck.NotNull(databaseMapping);
            DebugCheck.NotNull(providerManifest);

            foreach (var foreignKeyConstraint in databaseMapping.Database.GetEntityTypes().SelectMany(t => t.ForeignKeyBuilders))
            {
                foreignKeyConstraint
                .DependentColumns
                .Each(
                    (c, i) =>
                {
                    var primitivePropertyConfiguration =
                        c.GetConfiguration() as PrimitivePropertyConfiguration;

                    if ((primitivePropertyConfiguration != null) &&
                        (primitivePropertyConfiguration.ColumnType != null))
                    {
                        return;
                    }

                    var principalColumn = foreignKeyConstraint.PrincipalTable.DeclaredKeyProperties.ElementAt(i);

                    c.PrimitiveType = providerManifest.GetStoreTypeFromName(principalColumn.TypeName);

                    c.CopyFrom(principalColumn);
                });
            }
        }
        protected virtual void ConfigureColumn(EdmProperty column, EntityType table, DbProviderManifest providerManifest)
        {
            ConfigureColumnName(column, table);

            ConfigureAnnotations(column);

            if (!string.IsNullOrWhiteSpace(ColumnType))
            {
                column.PrimitiveType = providerManifest.GetStoreTypeFromName(ColumnType);
            }

            if (ColumnOrder != null)
            {
                column.SetOrder(ColumnOrder.Value);
            }

            var storeType
                = providerManifest.GetStoreTypes()
                  .SingleOrDefault(t => t.Name.Equals(column.TypeName, StringComparison.OrdinalIgnoreCase));

            if (storeType != null)
            {
                storeType.FacetDescriptions.Each(f => Configure(column, f));
            }

            column.SetConfiguration(this);
        }
Esempio n. 3
0
        private static void ConfigureDependentKeys(
            DbDatabaseMapping databaseMapping,
            DbProviderManifest providerManifest)
        {
            IList <EntityType> entityTypeList = databaseMapping.Database.EntityTypes as IList <EntityType> ?? (IList <EntityType>)databaseMapping.Database.EntityTypes.ToList <EntityType>();

            for (int index1 = 0; index1 < entityTypeList.Count; ++index1)
            {
                EntityType entityType = entityTypeList[index1];
                IList <ForeignKeyBuilder> foreignKeyBuilderList = entityType.ForeignKeyBuilders as IList <ForeignKeyBuilder> ?? (IList <ForeignKeyBuilder>)entityType.ForeignKeyBuilders.ToList <ForeignKeyBuilder>();
                for (int index2 = 0; index2 < foreignKeyBuilderList.Count; ++index2)
                {
                    ForeignKeyBuilder         foreignKeyBuilder = foreignKeyBuilderList[index2];
                    IEnumerable <EdmProperty> dependentColumns  = foreignKeyBuilder.DependentColumns;
                    IList <EdmProperty>       edmPropertyList   = dependentColumns as IList <EdmProperty> ?? (IList <EdmProperty>)dependentColumns.ToList <EdmProperty>();
                    for (int index3 = 0; index3 < edmPropertyList.Count; ++index3)
                    {
                        EdmProperty edmProperty = edmPropertyList[index3];
                        System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration configuration = edmProperty.GetConfiguration() as System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration;
                        if (configuration == null || configuration.ColumnType == null)
                        {
                            EdmProperty other = foreignKeyBuilder.PrincipalTable.KeyProperties.ElementAt <EdmProperty>(index3);
                            edmProperty.PrimitiveType = providerManifest.GetStoreTypeFromName(other.TypeName);
                            edmProperty.CopyFrom(other);
                        }
                    }
                }
            }
        }
Esempio n. 4
0
        internal virtual void Configure(
            EdmProperty column, EntityType table, DbProviderManifest providerManifest,
            bool allowOverride = false,
            bool fillFromExistingConfiguration = false)
        {
            DebugCheck.NotNull(column);
            DebugCheck.NotNull(table);
            DebugCheck.NotNull(providerManifest);

            var existingConfiguration = column.GetConfiguration() as PrimitivePropertyConfiguration;

            if (existingConfiguration != null)
            {
                var overridable = column.GetAllowOverride();

                string errorMessage;
                if ((existingConfiguration.OverridableConfigurationParts
                     & OverridableConfigurationParts.OverridableInSSpace)
                    != OverridableConfigurationParts.OverridableInSSpace &&
                    !overridable &&
                    !allowOverride &&
                    !fillFromExistingConfiguration &&
                    !existingConfiguration.IsCompatible(this, inCSpace: false, errorMessage: out errorMessage))
                {
                    throw Error.ConflictingColumnConfiguration(column.Name, table.Name, errorMessage);
                }

                FillFrom(existingConfiguration, inCSpace: false);
            }

            ConfigureColumnName(column, table);

            if (!string.IsNullOrWhiteSpace(ColumnType))
            {
                column.PrimitiveType = providerManifest.GetStoreTypeFromName(ColumnType);
            }

            if (ColumnOrder != null)
            {
                column.SetOrder(ColumnOrder.Value);
            }

            var storeType
                = providerManifest.GetStoreTypes()
                  .SingleOrDefault(t => t.Name.Equals(column.TypeName, StringComparison.OrdinalIgnoreCase));

            if (storeType != null)
            {
                storeType.FacetDescriptions.Each(f => Configure(column, f));
            }

            column.SetConfiguration(this);
            column.SetAllowOverride(allowOverride);
        }
        private static void ConfigureDependentKeys(DbDatabaseMapping databaseMapping, DbProviderManifest providerManifest)
        {
            DebugCheck.NotNull(databaseMapping);
            DebugCheck.NotNull(providerManifest);

            // PERF: this code written this way since it's part of a hotpath, consider its performance when refactoring. See codeplex #2298.
            var entityTypesList = databaseMapping.Database.EntityTypes as IList <EntityType> ?? databaseMapping.Database.EntityTypes.ToList();

            // ReSharper disable ForCanBeConvertedToForeach
            for (var entityTypesListIterator = 0;
                 entityTypesListIterator < entityTypesList.Count;
                 ++entityTypesListIterator)
            {
                var entityType         = entityTypesList[entityTypesListIterator];
                var foreignKeyBuilders = entityType.ForeignKeyBuilders as IList <ForeignKeyBuilder> ?? entityType.ForeignKeyBuilders.ToList();
                for (var foreignKeyBuildersIterator = 0;
                     foreignKeyBuildersIterator < foreignKeyBuilders.Count;
                     ++foreignKeyBuildersIterator)
                {
                    var foreignKeyConstraint = foreignKeyBuilders[foreignKeyBuildersIterator];

                    var dependentColumns     = foreignKeyConstraint.DependentColumns;
                    var dependentColumnsList = dependentColumns as IList <EdmProperty> ?? dependentColumns.ToList();

                    for (var i = 0; i < dependentColumnsList.Count; ++i)
                    {
                        var c = dependentColumnsList[i];
                        var primitivePropertyConfiguration =
                            c.GetConfiguration() as PrimitivePropertyConfiguration;

                        if ((primitivePropertyConfiguration != null) &&
                            (primitivePropertyConfiguration.ColumnType != null))
                        {
                            continue;
                        }

                        var principalColumn = foreignKeyConstraint.PrincipalTable.KeyProperties.ElementAt(i);

                        c.PrimitiveType = providerManifest.GetStoreTypeFromName(principalColumn.TypeName);

                        c.CopyFrom(principalColumn);
                    }
                }
            }
            // ReSharper restore ForCanBeConvertedToForeach
        }
Esempio n. 6
0
        protected virtual void ConfigureColumn(
            EdmProperty column,
            EntityType table,
            DbProviderManifest providerManifest)
        {
            this.ConfigureColumnName(column, table);
            this.ConfigureAnnotations(column);
            if (!string.IsNullOrWhiteSpace(this.ColumnType))
            {
                column.PrimitiveType = providerManifest.GetStoreTypeFromName(this.ColumnType);
            }
            if (this.ColumnOrder.HasValue)
            {
                column.SetOrder(this.ColumnOrder.Value);
            }
            PrimitiveType primitiveType = providerManifest.GetStoreTypes().SingleOrDefault <PrimitiveType>((Func <PrimitiveType, bool>)(t => t.Name.Equals(column.TypeName, StringComparison.OrdinalIgnoreCase)));

            if (primitiveType != null)
            {
                primitiveType.FacetDescriptions.Each <FacetDescription>((Action <FacetDescription>)(f => this.Configure(column, f)));
            }
            column.SetConfiguration((object)this);
        }