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

            foreach (var foreignKeyConstraint in databaseMapping.Database.EntityTypes.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.KeyProperties.ElementAt(i);

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

                                c.CopyFrom(principalColumn);
                            });
            }
        }
        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
        }