public void Configure( DbDatabaseMapping databaseMapping, ICollection <EntitySet> entitySets, DbProviderManifest providerManifest, EntityType entityType, ref EntityTypeMapping entityTypeMapping, bool isMappingAnyInheritedProperty, int configurationIndex, int configurationCount, IDictionary <string, object> commonAnnotations) { EntityType baseType = (EntityType)entityType.BaseType; bool flag = baseType == null && configurationIndex == 0; MappingFragment typeMappingFragment1 = this.FindOrCreateTypeMappingFragment(databaseMapping, ref entityTypeMapping, configurationIndex, entityType, providerManifest); EntityType table = typeMappingFragment1.Table; bool isTableSharing; EntityType createTargetTable = this.FindOrCreateTargetTable(databaseMapping, typeMappingFragment1, entityType, table, out isTableSharing); bool isSharingTableWithBase = this.DiscoverIsSharingWithBase(databaseMapping, entityType, createTargetTable); HashSet <EdmPropertyPath> contain = this.DiscoverAllMappingsToContain(databaseMapping, entityType, createTargetTable, isSharingTableWithBase); List <ColumnMappingBuilder> list = typeMappingFragment1.ColumnMappings.ToList <ColumnMappingBuilder>(); foreach (EdmPropertyPath edmPropertyPath in contain) { EdmPropertyPath propertyPath = edmPropertyPath; ColumnMappingBuilder columnMappingBuilder = typeMappingFragment1.ColumnMappings.SingleOrDefault <ColumnMappingBuilder>((Func <ColumnMappingBuilder, bool>)(pm => pm.PropertyPath.SequenceEqual <EdmProperty>((IEnumerable <EdmProperty>)propertyPath))); if (columnMappingBuilder == null) { throw Error.EntityMappingConfiguration_DuplicateMappedProperty((object)entityType.Name, (object)propertyPath.ToString()); } list.Remove(columnMappingBuilder); } if (!flag) { bool isSplitting; EntityType parentTable = EntityMappingConfiguration.FindParentTable(databaseMapping, table, entityTypeMapping, createTargetTable, isMappingAnyInheritedProperty, configurationIndex, configurationCount, out isSplitting); if (parentTable != null) { DatabaseOperations.AddTypeConstraint(databaseMapping.Database, entityType, parentTable, createTargetTable, isSplitting); } } if (table != createTargetTable) { if (this.Properties == null) { AssociationMappingOperations.MoveAllDeclaredAssociationSetMappings(databaseMapping, entityType, table, createTargetTable, !isTableSharing); ForeignKeyPrimitiveOperations.MoveAllDeclaredForeignKeyConstraintsForPrimaryKeyColumns(entityType, table, createTargetTable); } if (isMappingAnyInheritedProperty) { IEnumerable <EntityType> baseTables = databaseMapping.GetEntityTypeMappings(baseType).SelectMany <EntityTypeMapping, MappingFragment>((Func <EntityTypeMapping, IEnumerable <MappingFragment> >)(etm => (IEnumerable <MappingFragment>)etm.MappingFragments)).Select <MappingFragment, EntityType>((Func <MappingFragment, EntityType>)(mf => mf.Table)); AssociationSetMapping associationSetMapping = databaseMapping.EntityContainerMappings.SelectMany <EntityContainerMapping, AssociationSetMapping>((Func <EntityContainerMapping, IEnumerable <AssociationSetMapping> >)(asm => asm.AssociationSetMappings)).FirstOrDefault <AssociationSetMapping>((Func <AssociationSetMapping, bool>)(a => { if (!baseTables.Contains <EntityType>(a.Table)) { return(false); } if (baseType != a.AssociationSet.ElementType.SourceEnd.GetEntityType()) { return(baseType == a.AssociationSet.ElementType.TargetEnd.GetEntityType()); } return(true); })); if (associationSetMapping != null) { AssociationType elementType = associationSetMapping.AssociationSet.ElementType; throw Error.EntityMappingConfiguration_TPCWithIAsOnNonLeafType((object)elementType.Name, (object)elementType.SourceEnd.GetEntityType().Name, (object)elementType.TargetEnd.GetEntityType().Name); } ForeignKeyPrimitiveOperations.CopyAllForeignKeyConstraintsForPrimaryKeyColumns(databaseMapping.Database, table, createTargetTable); } } if (list.Any <ColumnMappingBuilder>()) { EntityType extraTable = (EntityType)null; if (configurationIndex < configurationCount - 1) { ColumnMappingBuilder pm = list.First <ColumnMappingBuilder>(); extraTable = EntityMappingConfiguration.FindTableForTemporaryExtraPropertyMapping(databaseMapping, entityType, table, createTargetTable, pm); MappingFragment typeMappingFragment2 = EntityMappingOperations.CreateTypeMappingFragment(entityTypeMapping, typeMappingFragment1, databaseMapping.Database.GetEntitySet(extraTable)); bool requiresUpdate = extraTable != table; foreach (ColumnMappingBuilder propertyMappingBuilder in list) { EntityMappingOperations.MovePropertyMapping(databaseMapping, (IEnumerable <EntitySet>)entitySets, typeMappingFragment1, typeMappingFragment2, propertyMappingBuilder, requiresUpdate, true); } } else { EntityType unmappedTable = (EntityType)null; foreach (ColumnMappingBuilder columnMappingBuilder in list) { extraTable = EntityMappingConfiguration.FindTableForExtraPropertyMapping(databaseMapping, entityType, table, createTargetTable, ref unmappedTable, columnMappingBuilder); MappingFragment mappingFragment = entityTypeMapping.MappingFragments.SingleOrDefault <MappingFragment>((Func <MappingFragment, bool>)(tmf => tmf.Table == extraTable)); if (mappingFragment == null) { mappingFragment = EntityMappingOperations.CreateTypeMappingFragment(entityTypeMapping, typeMappingFragment1, databaseMapping.Database.GetEntitySet(extraTable)); mappingFragment.SetIsUnmappedPropertiesFragment(true); } if (extraTable == table) { EntityMappingConfiguration.CopyDefaultDiscriminator(typeMappingFragment1, mappingFragment); } bool requiresUpdate = extraTable != table; EntityMappingOperations.MovePropertyMapping(databaseMapping, (IEnumerable <EntitySet>)entitySets, typeMappingFragment1, mappingFragment, columnMappingBuilder, requiresUpdate, true); } } } EntityMappingOperations.UpdatePropertyMappings(databaseMapping, (IEnumerable <EntitySet>)entitySets, table, typeMappingFragment1, !isTableSharing); this.ConfigureDefaultDiscriminator(entityType, typeMappingFragment1); this.ConfigureConditions(databaseMapping, entityType, typeMappingFragment1, providerManifest); EntityMappingOperations.UpdateConditions(databaseMapping.Database, table, typeMappingFragment1); ForeignKeyPrimitiveOperations.UpdatePrincipalTables(databaseMapping, entityType, table, createTargetTable, isMappingAnyInheritedProperty); EntityMappingConfiguration.CleanupUnmappedArtifacts(databaseMapping, table); EntityMappingConfiguration.CleanupUnmappedArtifacts(databaseMapping, createTargetTable); EntityMappingConfiguration.ConfigureAnnotations((EdmType)createTargetTable, commonAnnotations); EntityMappingConfiguration.ConfigureAnnotations((EdmType)createTargetTable, this._annotations); createTargetTable.SetConfiguration((object)this); }