public EntityBuilder(EntityMap <T> entityMap) { this._entityMap = entityMap; }
private void RegisterHierarchy(Type entityType, string name) { if (_entityMaps.ContainsKey(name)) { return; } var properties = entityType.GetProperties(BindingFlags.Instance | BindingFlags.Public); var propertyMappings = new Dictionary <string, IPropertyMap>(); var propertyMapType = typeof(PropertyMap <>); var relationTypes = new List <Type>(); foreach (var property in properties.Where(p => p.CanRead && p.CanWrite).OrderBy(p => p.Name)) { if (!propertyMappings.ContainsKey(property.Name)) { var genericPropertyMapType = propertyMapType.MakeGenericType(property.PropertyType); var propertyIndex = propertyMappings.Count + 1; var propertyMap = (IPropertyMap)Activator.CreateInstance(genericPropertyMapType, property, propertyIndex); propertyMappings.Add(property.Name, propertyMap); var extended = new ExtendedType(property.PropertyType); if (extended.Classification == TypeClassification.Collection) { var collectionInfo = extended.Container.AsCollection(); var extendedElementType = new ExtendedType(collectionInfo.ElementType); if (extendedElementType.Classification == TypeClassification.Complex) { relationTypes.Add(collectionInfo.ElementType); } } else if (extended.Classification == TypeClassification.Dictionary) { var dictionaryInfo = extended.Container.AsDictionary(); var extendedKeyType = new ExtendedType(dictionaryInfo.KeyType); if (extendedKeyType.Classification == TypeClassification.Complex) { relationTypes.Add(dictionaryInfo.KeyType); } var extendedValueType = new ExtendedType(dictionaryInfo.ValueType); if (extendedValueType.Classification == TypeClassification.Complex) { relationTypes.Add(dictionaryInfo.ValueType); } } else if (extended.Classification == TypeClassification.Complex) { relationTypes.Add(property.PropertyType); } } } var entityMap = EntityMap.Create(entityType, propertyMappings.Values, new IIndex[] {}); if (propertyMappings.ContainsKey("Id")) { entityMap.KeyName = "Id"; } else if (propertyMappings.ContainsKey("ID")) { entityMap.KeyName = "ID"; } else if (propertyMappings.ContainsKey(entityType.Name + "Id")) { entityMap.KeyName = entityType.Name + "Id"; } else if (propertyMappings.ContainsKey(entityType.Name + "ID")) { entityMap.KeyName = entityType.Name + "ID"; } else if (propertyMappings.ContainsKey("Guid")) { entityMap.KeyName = "Guid"; } else if (propertyMappings.ContainsKey("GUID")) { entityMap.KeyName = "GUID"; } _entityMaps.Add(name, entityMap); foreach (var relationType in relationTypes) { RegisterHierarchy(relationType); } }
public PropertyBuilder(EntityMap entityMap, PropertyMap <T> propertyMap) { _entityMap = entityMap; _propertyMap = propertyMap; }