public void Should_be_for_closed_entity_type() { // given var provider = new ClosedGenericEntityMappingProvider(CreateOpenGenericProvider("MappedProperty1"), typeof(int)); // when var entityType = provider.EntityType; // then entityType.Should().Be <IGenericParent <int> >(); }
private IEntityMapping CreateMappingFromGenericDefinition(Type genericDefinition, Type entityType) { var openGenericProvider = _openGenericProviders[genericDefinition]; var provider = new ClosedGenericEntityMappingProvider(openGenericProvider, entityType.GenericTypeArguments); foreach (var visitor in _providerVisitors) { provider.Accept(visitor); } return(_mappingBuilder.BuildMapping(provider)); }
public void Should_return_mappings_for_closed_properties(string propertyName, Type expectedType) { // given var provider = new ClosedGenericEntityMappingProvider(CreateOpenGenericProvider(propertyName), typeof(int)); // when var propertyMapping = provider.Properties.Single(); // then propertyMapping.Should().NotBeNull(); propertyMapping.PropertyInfo.PropertyType.Should().Be(expectedType); }
private void DiscoverProperties() { var inheritedProperties = new HashSet <IPropertyMappingProvider>(); var properties = new Dictionary <string, IPropertyMappingProvider>(); foreach (var property in _mainProvider.Properties) { properties[property.PropertyInfo.Name] = property; } var parents = new Queue <Type>(_mainProvider.EntityType.GetImmediateParents()); while (parents.Any()) { var iface = parents.Dequeue(); foreach (var immediateParent in iface.GetImmediateParents()) { parents.Enqueue(immediateParent); if (immediateParent.GetTypeInfo().IsGenericTypeDefinition&& _parentProviders.ContainsKey(immediateParent)) { var parentMapping = _parentProviders[immediateParent]; _parentProviders[iface] = new ClosedGenericEntityMappingProvider( parentMapping, iface.GetTypeInfo().GetGenericArguments()); } } if (_parentProviders.ContainsKey(iface)) { var provider = _parentProviders[iface]; foreach (var propertyMapping in provider.Properties) { inheritedProperties.Add(propertyMapping); } } } _propertyProviders.AddRange(properties.Values); foreach (var inheritedProperty in inheritedProperties.GroupBy(p => p.PropertyInfo.Name)) { if (properties.ContainsKey(inheritedProperty.Key)) { _hiddenProperties.AddRange(inheritedProperty.Where(p => p.PropertyInfo.DeclaringType.GetTypeInfo().IsGenericTypeDefinition == false)); } else { var propertyMappingProvider = (from property in inheritedProperty group property by property.PropertyInfo.DeclaringType.GetTypeInfo().IsGenericTypeDefinition into g select g).ToDictionary(g => g.Key, g => g); if (propertyMappingProvider[false].Any()) { _propertyProviders.AddRange(propertyMappingProvider[false]); } else { _propertyProviders.AddRange(propertyMappingProvider[true]); } } } }