private void ReassignSubtypeMappings() { // Re-assign sub-type mapping configurations to entity types foreach (var entityTypeConfiguration in ActiveEntityConfigurations) { foreach (var subTypeAndMappingConfigurationPair in entityTypeConfiguration.SubTypeMappingConfigurations) { var subTypeClrType = subTypeAndMappingConfigurationPair.Key; var subTypeEntityConfiguration = ActiveEntityConfigurations .SingleOrDefault(ec => ec.ClrType == subTypeClrType); if (subTypeEntityConfiguration == null) { subTypeEntityConfiguration = new EntityTypeConfiguration(subTypeClrType); _entityConfigurations.Add(subTypeClrType, subTypeEntityConfiguration); } subTypeEntityConfiguration.AddMappingConfiguration( subTypeAndMappingConfigurationPair.Value, cloneable: false); } } }
private IList <EntityTypeConfiguration> SortEntityConfigurationsByInheritance(DbDatabaseMapping databaseMapping) { var entityConfigurationsSortedByInheritance = new List <EntityTypeConfiguration>(); // Build a list such that parent type appears before its children foreach (var entityTypeConfiguration in ActiveEntityConfigurations) { var entityType = databaseMapping.Model.GetEntityType(entityTypeConfiguration.ClrType); if (entityType == null) { // for example, when the configuration points to a complex type continue; } if (entityType.BaseType == null) { if (!entityConfigurationsSortedByInheritance.Contains(entityTypeConfiguration)) { entityConfigurationsSortedByInheritance.Add(entityTypeConfiguration); } } else { var derivedTypes = new Stack <EntityType>(); while (entityType != null) { derivedTypes.Push(entityType); entityType = (EntityType)entityType.BaseType; } while (derivedTypes.Count > 0) { entityType = derivedTypes.Pop(); var correspondingEntityConfiguration = ActiveEntityConfigurations.SingleOrDefault(ec => ec.ClrType == entityType.GetClrType()); if ((correspondingEntityConfiguration != null) && (!entityConfigurationsSortedByInheritance.Contains(correspondingEntityConfiguration))) { entityConfigurationsSortedByInheritance.Add(correspondingEntityConfiguration); } } } } return(entityConfigurationsSortedByInheritance); }
private void DiscoverIndirectlyConfiguredComplexTypes() { ActiveEntityConfigurations .SelectMany(ec => ec.ConfiguredComplexTypes) .Each(t => ComplexType(t)); }