private void AddAggegations(object entity) { var list = entity .GetType() .GetProperties() .Select(p => new { property = p, isList = p.PropertyType.Name == "Listar`1", type = p.PropertyType.Name == "Listar`1" ? p.PropertyType.GenericTypeArguments[0] : p.PropertyType, attr = p.GetCustomAttribute <DnAgregacaoAtributo>(true) }) .Where(x => x.attr != null) .ToList(); foreach (var item in list) { if (item == null) { continue; } var aggregation = SortedAggregations.Single(x => x.EntityType == item.type); object value = aggregation.Instance; var externalKeys = item.attr.ChavesExternas; var localKeys = item.attr.ChavesLocais; for (int i = 0; i < externalKeys.Length; i++) { var externalKey = externalKeys[i]; var localKey = localKeys[i]; if (value != null) { var externalValue = item.type.GetProperty(externalKey)?.GetValue(value); entity.GetType().GetProperty(localKey)?.SetValue(entity, externalValue); } } { //Set complex object if (item.isList) { var typeList = typeof(List <>).MakeGenericType(item.type); if (value == null) { value = Activator.CreateInstance(typeList); } else { value = Activator.CreateInstance(typeList, value); } } item.property.SetValue(entity, value); } } }
private void AddAggregation(DnNode node) { Console.WriteLine($"{node.EntityType.Name} Mapped"); SortedAggregations.Add(node); }