private static bool RemapsInheritedProperties( DbDatabaseMapping databaseMapping, EntityTypeMapping entityTypeMapping) { foreach (EdmProperty edmProperty in entityTypeMapping.EntityType.Properties.Except <EdmProperty>((IEnumerable <EdmProperty>)entityTypeMapping.EntityType.DeclaredProperties).Except <EdmProperty>((IEnumerable <EdmProperty>)entityTypeMapping.EntityType.GetKeyProperties())) { EdmProperty property = edmProperty; MappingFragment fragment = MappingInheritedPropertiesSupportConvention.GetFragmentForPropertyMapping(entityTypeMapping, property); if (fragment != null) { for (EntityType baseType = (EntityType)entityTypeMapping.EntityType.BaseType; baseType != null; baseType = (EntityType)baseType.BaseType) { if (databaseMapping.GetEntityTypeMappings(baseType).Select <EntityTypeMapping, MappingFragment>((Func <EntityTypeMapping, MappingFragment>)(baseTypeMapping => MappingInheritedPropertiesSupportConvention.GetFragmentForPropertyMapping(baseTypeMapping, property))).Any <MappingFragment>((Func <MappingFragment, bool>)(baseFragment => { if (baseFragment != null) { return(baseFragment.Table != fragment.Table); } return(false); }))) { return(true); } } } } return(false); }
void IDbMappingConvention.Apply(DbDatabaseMapping databaseMapping) { Check.NotNull <DbDatabaseMapping>(databaseMapping, nameof(databaseMapping)); databaseMapping.EntityContainerMappings.SelectMany <EntityContainerMapping, EntitySetMapping>((Func <EntityContainerMapping, IEnumerable <EntitySetMapping> >)(ecm => ecm.EntitySetMappings)).Each <EntitySetMapping>((Action <EntitySetMapping>)(esm => { foreach (EntityTypeMapping entityTypeMapping in esm.EntityTypeMappings) { if (MappingInheritedPropertiesSupportConvention.RemapsInheritedProperties(databaseMapping, entityTypeMapping) && MappingInheritedPropertiesSupportConvention.HasBaseWithIsTypeOf(esm, entityTypeMapping.EntityType)) { throw Error.UnsupportedHybridInheritanceMapping((object)entityTypeMapping.EntityType.Name); } } })); }