private MergingEntityMapping BuildEntityMapping(IDictionary <Type, IEntityMapping> mappings, ITermMappingProvider mappingProvider) { IEntityMapping existingEntityMapping; if (!mappings.TryGetValue(mappingProvider.EntityType, out existingEntityMapping)) { mappings[mappingProvider.EntityType] = existingEntityMapping = new MergingEntityMapping(mappingProvider.EntityType); } var mergingEntityMapping = existingEntityMapping as MergingEntityMapping; var entityMappingProvider = mappingProvider as IEntityMappingProvider; if (entityMappingProvider == null) { return(mergingEntityMapping); } var term = entityMappingProvider.GetTerm(_qiriMappings); if (term != null) { mergingEntityMapping.Classes.Add(new StatementMapping(entityMappingProvider.GetGraph(_qiriMappings), term)); } return(mergingEntityMapping); }
private void BuildPropertyMapping(MergingEntityMapping existingEntityMapping, IPropertyMappingProvider propertyMappingProvider) { if (propertyMappingProvider == null) { return; } IConverter valueConverter = null; if (propertyMappingProvider.ValueConverterType != null) { valueConverter = _converterProvider.FindConverter(propertyMappingProvider.ValueConverterType); } var collectionMappingProvider = propertyMappingProvider as ICollectionMappingProvider; IPropertyMapping propertyMapping = collectionMappingProvider != null ? CollectionMapping.CreateFrom(existingEntityMapping, collectionMappingProvider, valueConverter, _qiriMappings) : PropertyMapping.CreateFrom(existingEntityMapping, propertyMappingProvider, valueConverter, _qiriMappings); var existingPropertyMapping = existingEntityMapping.Properties.FirstOrDefault(mapping => mapping.Name == propertyMappingProvider.Property.Name); if (existingPropertyMapping != null) { if (!PropertyMappingEqualityComparer.Default.Equals(propertyMapping, existingPropertyMapping)) { throw new AmbiguousMappingException( $"Mapping for ${propertyMappingProvider.Property.Name} for type ${existingEntityMapping.Type} is already defined."); } return; } existingEntityMapping.Properties.Add(propertyMapping); }