/// <inheritdoc /> public void Set(IEntityMapping entityMapping, Iri owningEntity) { if (entityMapping != null) { IDictionary <Type, MergingEntityMapping> entityMappings; if (!ExplicitMappings.TryGetValue(owningEntity, out entityMappings)) { ExplicitMappings[owningEntity] = entityMappings = new ConcurrentDictionary <Type, MergingEntityMapping>(); } MergingEntityMapping currentEntityMapping; if (!entityMappings.TryGetValue(entityMapping.Type, out currentEntityMapping)) { var newEntityMapping = entityMapping as MergingEntityMapping; if (newEntityMapping != null) { entityMappings[entityMapping.Type] = newEntityMapping; return; } entityMappings[entityMapping.Type] = currentEntityMapping = new MergingEntityMapping(entityMapping.Type); } foreach (var @class in entityMapping.Classes) { currentEntityMapping.Classes.Add(@class); } foreach (var property in entityMapping.Properties) { var existingMappings = currentEntityMapping.Properties.Where(item => item.Name == property.Name).ToList(); foreach (var existingMapping in existingMappings) { currentEntityMapping.Properties.Remove(existingMapping); } currentEntityMapping.Properties.Add(property); foreach (var existingMapping in existingMappings) { currentEntityMapping.Properties.Add(existingMapping); } } } }
private static IEntityMapping BuildMapping <TEntity>(this ICollection <ITermMappingProvider> mappingProviders, out IPropertyMapping firstPropertyMapping) { firstPropertyMapping = null; var entityMapping = new MergingEntityMapping(typeof(TEntity)); foreach (var mappingProvider in mappingProviders) { mappingProvider.Accept(MappingVisitors); var entityMappingProvider = mappingProvider as IEntityMappingProvider; if (entityMappingProvider != null) { entityMapping.Classes.Add(new StatementMapping(entityMappingProvider.GetGraph(QIriMappings), entityMappingProvider.GetTerm(QIriMappings))); continue; } var propertyMappingProvider = mappingProvider as IPropertyMappingProvider; if (propertyMappingProvider == null) { continue; } ILiteralConverter valueConverter = null; if (propertyMappingProvider.ValueConverterType != null) { valueConverter = ConverterProvider.FindConverter(propertyMappingProvider.ValueConverterType); } var collectionMappingProvider = mappingProvider as ICollectionMappingProvider; var propertyMapping = (collectionMappingProvider != null ? CollectionMapping.CreateFrom(entityMapping, collectionMappingProvider, valueConverter, QIriMappings) : PropertyMapping.CreateFrom(entityMapping, propertyMappingProvider, valueConverter, QIriMappings)); entityMapping.Properties.Add(propertyMapping); if (firstPropertyMapping == null) { firstPropertyMapping = propertyMapping; } } return(entityMapping); }