// remove the base type properties from the derived types. internal void RemoveBaseTypeProperties(StructuralTypeConfiguration derivedStructrualType, StructuralTypeConfiguration baseStructuralType) { IEnumerable <StructuralTypeConfiguration> typesToLift = new[] { derivedStructrualType } .Concat(this.DerivedTypes(derivedStructrualType)); foreach (PropertyConfiguration property in baseStructuralType.Properties .Concat(baseStructuralType.DerivedProperties())) { foreach (StructuralTypeConfiguration structuralType in typesToLift) { PropertyConfiguration derivedPropertyToRemove = structuralType.Properties.SingleOrDefault( p => p.PropertyInfo.Name == property.PropertyInfo.Name); if (derivedPropertyToRemove != null) { structuralType.RemoveProperty(derivedPropertyToRemove.PropertyInfo); } } } foreach (PropertyInfo ignoredProperty in baseStructuralType.IgnoredProperties()) { foreach (StructuralTypeConfiguration structuralType in typesToLift) { PropertyConfiguration derivedPropertyToRemove = structuralType.Properties.SingleOrDefault( p => p.PropertyInfo.Name == ignoredProperty.Name); if (derivedPropertyToRemove != null) { structuralType.RemoveProperty(derivedPropertyToRemove.PropertyInfo); } } } }