comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Mapper para Entidades [C#]

  • 0 Respuestas
  • 1479 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado xxneeco83xx

  • *
  • Underc0der
  • Mensajes: 46
  • Actividad:
    0%
  • Reputación 0
  • ASM/C/C++/VB/Delphi
    • Ver Perfil
    • Email
  • Skype: nico.buzzi
« en: Julio 29, 2016, 07:48:40 pm »
Que tal ! llevo mucho tiempo desde la ultima vez que ingrese aquí y compartí algo, con el tema de que ocurrieron muchos cambios en estos últimos meses y demás, se hizo dificil.
Les dejo un Mapper que desarrolle hace unos días atrás que es una alternativa a el Famoso "AutoMapper" que a mi recomendación es preferible que no se le use, ya que es demaciado lento.
Este codigo que adjuntare junto con su ejemplo de uso, pasara un object con sus navigations properties así mismo sean listas, a DTO o a ViewModel.

Código: C#
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Text.RegularExpressions;
  7.  
  8. namespace ConsoleApplication1
  9. {
  10.     public class MapperConfiguration
  11.     {
  12.         public string Name { get; set; }
  13.         public IList<string> AssemblyList { get; set; }
  14.         public List<Assembly> Classes { get; set; }
  15.     }
  16.    
  17.     public static class Mapper
  18.     {
  19.         private static MapperConfiguration _mapperConfiguration = You are not allowed to view links. Register or Login MapperConfiguration { Name = "DTO" };
  20.  
  21.         public static void ConfigureMapper(MapperConfiguration mapperConfiguration)
  22.         {
  23.             //_mapperConfiguration.Name = mapperConfiguration.Name;
  24.             _mapperConfiguration = mapperConfiguration;
  25.  
  26.             if ( mapperConfiguration.AssemblyList != null)
  27.             {
  28.                 foreach(var item in mapperConfiguration.AssemblyList)
  29.                 {
  30.                     var assemblyTempList = Assembly.ReflectionOnlyLoad(item);
  31.                     _mapperConfiguration.Classes.Add(assemblyTempList);
  32.                 }
  33.                
  34.             }
  35.         }
  36.  
  37.         #region Mapper con configuracion
  38.  
  39.         public static U MapProperty<T,U>(this T source, IDictionary<string,string> configurationMapper)
  40.             where T : class, You are not allowed to view links. Register or Login()
  41.             where U : class, You are not allowed to view links. Register or Login()
  42.         {
  43.             if ( source == null || configurationMapper == null)
  44.             {
  45.                 return default(U);
  46.             }
  47.  
  48.             /*Obtenemos las properties del object source*/
  49.             var sourceProperties = source.GetType().GetProperties();
  50.  
  51.             var destinyInstance = Activator.CreateInstance(You are not allowed to view links. Register or Login(U));
  52.             var destinyProperties = destinyInstance.GetType().GetProperties();
  53.  
  54.             foreach(var i in sourceProperties)
  55.             {
  56.                 //Buscamos si la property que quiere copiar tiene source
  57.                 var firstFind = configurationMapper.FirstOrDefault(m => m.Key.Contains(i.Name));
  58.                 if (string.IsNullOrEmpty(firstFind.Key) || string.IsNullOrEmpty(firstFind.Value))
  59.                     continue;
  60.  
  61.                 var secondFind = destinyProperties.FirstOrDefault(m => m.Name.Contains(firstFind.Value));
  62.                 if ( secondFind == null)
  63.                 {
  64.                     continue;
  65.                 }
  66.  
  67.                 if ( i.Name.Contains("Collection"))
  68.                 {
  69.  
  70.                 }
  71.  
  72.                 secondFind.SetValue(destinyInstance, i.GetValue(source));
  73.  
  74.             }
  75.  
  76.             return (U)destinyInstance;
  77.         }
  78.  
  79.         #endregion
  80.  
  81.         #region Formula 1
  82.  
  83.         /*Metodo para mapear simples objects*/
  84.         public static dynamic Map<T>(this T source)
  85.             where T : class, You are not allowed to view links. Register or Login()
  86.         {
  87.             //Check for source
  88.             if (source == null )
  89.                 return null;
  90.  
  91.             //Donde almacenaremos el tipo de destino
  92.             Type destinyType = null;
  93.  
  94.             //Obtenemos todas las clases
  95.             var classList = Assembly.GetExecutingAssembly().GetTypes();
  96.  
  97.             //Obtenemos las properties del source
  98.             var propertiesSource = source.GetType().GetProperties();
  99.  
  100.             //Si no podemos obtener clases o properties
  101.             if ( propertiesSource == null || classList == null )
  102.             {
  103.                 return You are not allowed to view links. Register or Login Exception("Error al obtener clases o properties desde el assembly");
  104.             }
  105.  
  106.             if (source.GetType().ToString().Contains("Collection"))
  107.             {
  108.                 if (source.GetType().Name.Contains("ViewModel") || source.GetType().Name.Contains("DTO") || source.GetType().Name.Contains(_mapperConfiguration.Name))
  109.                 {
  110.                     var firstTest = Regex.Split(propertiesSource.FirstOrDefault().Name, "ViewModel")[0];
  111.                     if (string.IsNullOrEmpty(firstTest))
  112.                     {
  113.                         firstTest = "DTO";
  114.                     }
  115.                     else
  116.                     {
  117.                         firstTest = "ViewModel";
  118.                     }
  119.  
  120.                     destinyType = classList.FirstOrDefault(
  121.                         m => m.Name.Contains(Regex.Split(propertiesSource.FirstOrDefault().Name,firstTest)[0] + _mapperConfiguration.Name));
  122.                 }
  123.                 else
  124.                 {
  125.                     destinyType = classList.FirstOrDefault(
  126.                         m => m.Name.Contains(propertiesSource.FirstOrDefault().Name + _mapperConfiguration.Name));
  127.                 }
  128.             }
  129.             else
  130.             {
  131.                 if (source.GetType().Name.Contains("ViewModel") || source.GetType().Name.Contains("DTO") || source.GetType().Name.Contains(_mapperConfiguration.Name))
  132.                 {
  133.                     var firstTest = Regex.Split(source.GetType().Name, "ViewModel")[0];
  134.                     if (string.IsNullOrEmpty(firstTest))
  135.                     {
  136.                         firstTest = "DTO";
  137.                     } else
  138.                     {
  139.                         firstTest = "ViewModel";
  140.                     }
  141.  
  142.                     destinyType = classList.FirstOrDefault(
  143.                         m => m.Name.Contains(Regex.Split(source.GetType().Name,firstTest)[0] + _mapperConfiguration.Name));
  144.                 }
  145.                 else
  146.                 {
  147.                     destinyType = classList.FirstOrDefault(
  148.                         m => m.Name.Contains(source.GetType().Name + _mapperConfiguration.Name));
  149.                 }
  150.             }
  151.  
  152.             try
  153.             {
  154.  
  155.                 //Creamos la instancia del object
  156.                 var instance = Activator.CreateInstance(destinyType);
  157.  
  158.                 //Obtenemos las properties del object de destino
  159.                 var propertyOfDestiny = instance.GetType().GetProperties();
  160.  
  161.                 foreach (var item in propertyOfDestiny)
  162.                 {
  163.                     //Buscamos la property
  164.                     var result = propertiesSource.FirstOrDefault(m => m.Name == item.Name);
  165.                     if (result != null)
  166.                     {
  167.                         //En caso de que no sea un Object de tipo distinto a los nativos de C#
  168.                         if ((!(result).PropertyType.Name.Contains("String")) && (!(result).PropertyType.Name.Contains("Int"))
  169.                             && (!(result).PropertyType.Name.Contains("Bool")) && (!(result).PropertyType.Name.Contains("Float"))
  170.                             && (!(result).PropertyType.Name.Contains("Double")))
  171.                         {
  172.                             //En caso de ser lista
  173.                             if (result.ToString().Contains("Collection"))
  174.                             {
  175.                                 Type type = null;
  176.  
  177.                                 if (result.PropertyType.GetGenericArguments().Single().Name.Contains("ViewModel") || result.PropertyType.GetGenericArguments().Single().Name.Contains("DTO") ||
  178.                                     result.PropertyType.GetGenericArguments().Single().Name.Contains(_mapperConfiguration.Name))
  179.                                 {
  180.                                     var firstTest = Regex.Split(result.PropertyType.GetGenericArguments().Single().Name, "ViewModel")[0];
  181.                                     if (string.IsNullOrEmpty(firstTest))
  182.                                     {
  183.                                         firstTest = "DTO";
  184.                                     } else
  185.                                     {
  186.                                         firstTest = "ViewModel";
  187.                                     }
  188.  
  189.                                     type = classList.FirstOrDefault(m => m.FullName.Contains(Regex.Split(result.PropertyType.GetGenericArguments().Single().Name,firstTest)[0] + _mapperConfiguration.Name));
  190.                                 }
  191.                                 else
  192.                                 {
  193.                                     type = classList.FirstOrDefault(m => m.FullName.Contains(result.PropertyType.GetGenericArguments().Single().Name + _mapperConfiguration.Name));
  194.                                 }
  195.  
  196.                                 if (type == null)
  197.                                 {
  198.                                     continue;
  199.                                 }
  200.  
  201.                                 var listInstance = (IList)You are not allowed to view links. Register or Login(List<>).MakeGenericType(type).GetConstructor(Type.EmptyTypes).Invoke(null);
  202.  
  203.                                 item.SetValue(instance, ((ICollection)result.GetValue(source)).MapList());
  204.                             }
  205.                             else
  206.                             {
  207.                                 Type type = null;
  208.                                 if (result.Name.Contains("ViewModel") || result.Name.Contains("DTO") ||
  209.                                     result.Name.Contains(_mapperConfiguration.Name))
  210.                                 {
  211.  
  212.                                     var firstTest = Regex.Split(result.Name, "ViewModel")[0];
  213.                                     if (string.IsNullOrEmpty(firstTest))
  214.                                     {
  215.                                         firstTest = "DTO";
  216.                                     }
  217.                                     else
  218.                                     {
  219.                                         firstTest = "ViewModel";
  220.                                     }
  221.  
  222.                                     //En caso de ser un object
  223.                                     type = classList.FirstOrDefault(m => m.FullName.Contains(Regex.Split(result.Name,firstTest)[0] + _mapperConfiguration.Name));
  224.                                 }
  225.                                 else
  226.                                 {
  227.                                     //En caso de ser un object
  228.                                     type = classList.FirstOrDefault(m => m.FullName.Contains(result.Name + _mapperConfiguration.Name));
  229.                                 }
  230.                                 if (type == null)
  231.                                 {
  232.                                     continue;
  233.                                 }
  234.  
  235.                                 item.SetValue(instance, result.GetValue(source).Map());
  236.                             }
  237.                         }
  238.                         else
  239.                         {
  240.                             //Property normal
  241.                             item.SetValue(instance, result.GetValue(source));
  242.                         }
  243.                     }
  244.                 }
  245.  
  246.                 return instance;
  247.  
  248.             }
  249.             catch (Exception e)
  250.             {
  251.                 return e.Message;
  252.             }
  253.  
  254.         }
  255.  
  256.         /*Metodos para mapear listas*/
  257.         public static dynamic MapList<T>(this T source)
  258.             where T : ICollection
  259.         {
  260.             //Check for source
  261.             if (source == null)
  262.                 return null;
  263.  
  264.             if (source.GetType().GetGenericArguments().Count() == 0)
  265.                 return null;
  266.  
  267.             Type destinyType = null;
  268.             bool isCollection = false;
  269.  
  270.             if (source.GetType().ToString().Contains("Collection"))
  271.             {
  272.                 foreach(var i in source)
  273.                 {
  274.                     if ( i.GetType().Name.Contains("ViewModel") || i.GetType().Name.Contains("DTO") || i.GetType().Name.Contains(_mapperConfiguration.Name))
  275.                     {
  276.                         var firstTest = Regex.Split(i.GetType().Name, "ViewModel")[0];
  277.                         if (string.IsNullOrEmpty(firstTest))
  278.                         {
  279.                             firstTest = Regex.Split(i.GetType().Name, "DTO")[0];
  280.                         }
  281.  
  282.                         destinyType = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(
  283.                             m => m.Name.Contains(firstTest + _mapperConfiguration.Name));
  284.                     }
  285.                     else
  286.                     {
  287.                         destinyType = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(
  288.                             m => m.Name.Contains(i.GetType().Name + _mapperConfiguration.Name));
  289.                     }
  290.  
  291.                     isCollection = true;
  292.  
  293.                     break;
  294.                 }
  295.             }
  296.  
  297.             if (!isCollection)
  298.                 return You are not allowed to view links. Register or Login Exception("Este object no es una lista de tipo coleccion");
  299.  
  300.             var listType = source.GetType().GetGenericArguments().Single();
  301.  
  302.             //Check if the type of object is or not a collection list.
  303.             if (source.GetType().ToString().Contains("Collection"))
  304.             {
  305.                 try
  306.                 {
  307.                     dynamic list;
  308.  
  309.                     //Create instance of list
  310.                     if ( isCollection)
  311.                     {
  312.                         list = (IList)You are not allowed to view links. Register or Login(List<>).MakeGenericType(destinyType).GetConstructor(Type.EmptyTypes).Invoke(null);
  313.                     } else
  314.                     {
  315.                         list = Activator.CreateInstance(destinyType);
  316.                     }
  317.  
  318.                     //Loop in the list
  319.                     foreach (var i in source)
  320.                     {
  321.                         if (i.GetType().ToString().Contains("Collection"))
  322.                         {
  323.                             var mapped = ((ICollection)i).MapList();
  324.  
  325.                             foreach (var item in mapped)
  326.                             {
  327.                                 ((IList<object>)list).Add(item);
  328.                             }
  329.  
  330.                         }
  331.                         else
  332.                         {
  333.                             ((IList)list).Add(i.Map());
  334.                         }
  335.  
  336.                     }
  337.  
  338.                     return list;
  339.                 }
  340.                 catch (Exception e)
  341.                 {
  342.                     return e.Message;
  343.                 }
  344.  
  345.             }
  346.  
  347.             return null;
  348.         }
  349.  
  350.         #endregion
  351.  
  352.         #region Formula 2
  353.  
  354.         /*Metodo para mapear simples objects*/
  355.         public static dynamic MapToEntity<T>(this T source)
  356.             where T : class, You are not allowed to view links. Register or Login()
  357.         {
  358.             //Check for source
  359.             if (source == null)
  360.                 return null;
  361.  
  362.             Type destinyType = null;
  363.  
  364.             //Obtenemos todas las clases
  365.             var classList = Assembly.GetExecutingAssembly().GetTypes();
  366.  
  367.             //Obtenemos las properties del source
  368.             var propertiesSource = source.GetType().GetProperties();
  369.  
  370.             //Si no podemos obtener clases o properties
  371.             if ( propertiesSource == null || classList == null )
  372.             {
  373.                 return You are not allowed to view links. Register or Login Exception("Error al obtener clases o properties desde el assembly");
  374.             }
  375.  
  376.             if (source.GetType().ToString().Contains("Collection"))
  377.             {
  378.                 destinyType = classList.FirstOrDefault(
  379.                     m => m.Name.Contains(Regex.Split(propertiesSource.FirstOrDefault().Name,_mapperConfiguration.Name)[0]));
  380.  
  381.             }
  382.             else
  383.             {
  384.                 destinyType = classList.FirstOrDefault(
  385.                     m => m.Name.Contains(Regex.Split(source.GetType().Name,_mapperConfiguration.Name)[0]));
  386.             }
  387.  
  388.             try
  389.             {
  390.                 //Creamos la instancia del object
  391.                 var instance = Activator.CreateInstance(destinyType);
  392.  
  393.                 //Obtenemos las properties del object de destino
  394.                 var propertyOfDestiny = instance.GetType().GetProperties();
  395.  
  396.                 foreach (var item in propertyOfDestiny)
  397.                 {
  398.                     //Buscamos la property
  399.                     var result = propertiesSource.FirstOrDefault(m => m.Name == item.Name);
  400.                     if (result != null)
  401.                     {
  402.                         //En caso de que no sea un Object de tipo distinto a los nativos de C#
  403.                         if ((!(result).PropertyType.Name.Contains("String")) && (!(result).PropertyType.Name.Contains("Int"))
  404.                             && (!(result).PropertyType.Name.Contains("Bool")) && (!(result).PropertyType.Name.Contains("Float"))
  405.                             && (!(result).PropertyType.Name.Contains("Double")))
  406.                         {
  407.                             //En caso de ser lista
  408.                             if (result.ToString().Contains("Collection"))
  409.                             {
  410.                                 var type = classList.FirstOrDefault(m => m.FullName.Contains(Regex.Split(result.PropertyType.GetGenericArguments()
  411.                                     .Single().Name,_mapperConfiguration.Name)[0]));
  412.  
  413.                                 if (type == null)
  414.                                 {
  415.                                     continue;
  416.                                 }
  417.  
  418.                                 var listInstance = (IList)You are not allowed to view links. Register or Login(List<>).MakeGenericType(type).GetConstructor(Type.EmptyTypes).Invoke(null);
  419.  
  420.                                 item.SetValue(instance, ((ICollection)result.GetValue(source)).MapToEntityList());
  421.                             }
  422.                             else
  423.                             {
  424.                                 //En caso de ser un object
  425.                                 var type = classList.FirstOrDefault(m => m.FullName.Contains(Regex.Split(result.Name,_mapperConfiguration.Name)[0]));
  426.  
  427.                                 if (type == null)
  428.                                 {
  429.                                     continue;
  430.                                 }
  431.  
  432.                                 item.SetValue(instance, result.GetValue(source).MapToEntity());
  433.                             }
  434.                         }
  435.                         else
  436.                         {
  437.                             //Property normal
  438.                             item.SetValue(instance, result.GetValue(source));
  439.                         }
  440.                     }
  441.                 }
  442.  
  443.                 return instance;
  444.  
  445.             }
  446.             catch (Exception e)
  447.             {
  448.                 return e.Message;
  449.             }
  450.  
  451.         }
  452.  
  453.         /*Metodos para mapear listas*/
  454.         public static dynamic MapToEntityList<T>(this T source)
  455.             where T : ICollection
  456.         {
  457.  
  458.             //Check for source
  459.             if (source == null)
  460.                 return null;
  461.  
  462.             if (source.GetType().GetGenericArguments().Count() == 0)
  463.                 return null;
  464.  
  465.             Type destinyType = null;
  466.             bool isCollection = false;
  467.  
  468.             if (source.GetType().ToString().Contains("Collection"))
  469.             {
  470.                 foreach (var i in source)
  471.                 {
  472.                     destinyType = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(
  473.                     m => m.Name.Contains(Regex.Split(i.GetType().Name,_mapperConfiguration.Name)[0]));
  474.  
  475.                     isCollection = true;
  476.  
  477.                     break;
  478.                 }
  479.             }
  480.  
  481.             if (!isCollection)
  482.                 return You are not allowed to view links. Register or Login Exception("Este object no es una lista de tipo coleccion");
  483.  
  484.             var listType = source.GetType().GetGenericArguments().Single();
  485.  
  486.             //Check if the type of object is or not a collection list.
  487.             if (source.GetType().ToString().Contains("Collection"))
  488.             {
  489.                 try
  490.                 {
  491.                     dynamic list;
  492.  
  493.                     //Create instance of list
  494.                     if (isCollection)
  495.                     {
  496.                         list = (IList)You are not allowed to view links. Register or Login(List<>).MakeGenericType(destinyType).GetConstructor(Type.EmptyTypes).Invoke(null);
  497.                     }
  498.                     else
  499.                     {
  500.                         list = Activator.CreateInstance(destinyType);
  501.                     }
  502.  
  503.                     //Loop in the list
  504.                     foreach (var i in source)
  505.                     {
  506.                         if (i.GetType().ToString().Contains("Collection"))
  507.                         {
  508.                             var mapped = ((ICollection)i).MapToEntityList();
  509.  
  510.                             foreach (var item in mapped)
  511.                             {
  512.                                 ((IList<object>)list).Add(item);
  513.                             }
  514.  
  515.                         }
  516.                         else
  517.                         {
  518.                             ((IList)list).Add(i.MapToEntity());
  519.                         }
  520.  
  521.                     }
  522.  
  523.                     return list;
  524.                 }
  525.                 catch (Exception e)
  526.                 {
  527.                     return e.Message;
  528.                 }
  529.  
  530.             }
  531.  
  532.             return null;
  533.         }
  534.  
  535.         #endregion
  536.     }
  537. }
  538.  
  539.  

Ejemplo de uso

Código: C#
  1. using ConsoleApplication1.DTO;
  2. using ConsoleApplication1.Entidades;
  3. using System;
  4. using System.Collections.Generic;
  5.  
  6. public class Uno
  7. {
  8.     public string Nombre { get; set; }
  9.     public string Apellido { get; set; }
  10.  
  11.     public void Saludar(string message, string another)
  12.     {
  13.         Console.WriteLine(message + "\n" + another);
  14.         return;
  15.     }
  16. }
  17.  
  18. public class Dos
  19. {
  20.     public string Name { get; set; }
  21.     public string SurName { get; set; }
  22.  
  23.     public void Saludar(string message)
  24.     {
  25.         Console.WriteLine(message);
  26.         return;
  27.     }
  28. }
  29.  
  30. namespace ConsoleApplication1
  31. {
  32.     public static class RemoteCall
  33.     {
  34.         /*
  35.          * Assembly assembly = Assembly.LoadFile("...Assembly1.dll");
  36.          * Type type = assembly.GetType("TestAssembly.Main");
  37.          */
  38.         public static T Instance<T>()
  39.             where T : class, You are not allowed to view links. Register or Login()
  40.         {
  41.             return (T)Activator.CreateInstance(You are not allowed to view links. Register or Login(T));
  42.         }
  43.  
  44.         public static T Invoke<T>(string methodName, object[] parameters)
  45.             where T : class, You are not allowed to view links. Register or Login()
  46.         {
  47.             var classSource = Instance<T>();
  48.             var methods = classSource.GetType().GetMethods();
  49.  
  50.             foreach(var i in methods)
  51.             {
  52.                 if ( i.Name == methodName)
  53.                 {
  54.                     i.Invoke(classSource, parameters);
  55.                 }
  56.             }
  57.  
  58.             return default(T);
  59.         }
  60.     }
  61.  
  62.     class Program
  63.     {
  64.         static void Main(string[] args)
  65.         {
  66.  
  67.             var objeto = You are not allowed to view links. Register or Login Usuario
  68.             {
  69.                 Id = 1,
  70.                 Nombre = "Nicolas",
  71.                 Perfil = You are not allowed to view links. Register or Login List<Perfil>
  72.                 {
  73.                     You are not allowed to view links. Register or Login Perfil
  74.                     {
  75.                         Tipo = "Normal",
  76.                         Entrega = You are not allowed to view links. Register or Login Entrega
  77.                         {
  78.                             Proveedor = "Nicolas"
  79.                         }
  80.                     },
  81.                     You are not allowed to view links. Register or Login Perfil
  82.                     {
  83.                         Tipo = "Punchi",
  84.                         Entrega = You are not allowed to view links. Register or Login Entrega
  85.                         {
  86.                             Proveedor = "Jebus"
  87.                         }
  88.                     }
  89.                 }
  90.             };
  91.  
  92.             //var instanciado = RemoteCall.Instance<Uno>();
  93.             RemoteCall.Invoke<Dos>("Saludar", You are not allowed to view links. Register or Login object[] { "hola amigos" } );
  94.  
  95.             var source = You are not allowed to view links. Register or Login Uno { Nombre = "Nicolas", Apellido = "Buzzi" };
  96.  
  97.             var dic = You are not allowed to view links. Register or Login Dictionary<string, string>();
  98.  
  99.             dic.Add("Nombre", "Name");
  100.             dic.Add("Apellido", "SurName");
  101.  
  102.             var mapeo = source.MapProperty<Uno,Dos>(dic);
  103.  
  104.             var listOfObjects = You are not allowed to view links. Register or Login List<Usuario>();
  105.             listOfObjects.Add(objeto);
  106.             listOfObjects.Add(objeto);
  107.  
  108.             //Inicializamos el mapper con nuestra configuracion para adaptarla a viewModel
  109.             Mapper.ConfigureMapper(You are not allowed to view links. Register or Login MapperConfiguration { Name = "ViewModel" });
  110.  
  111.             /*Convetimos Entidad a DTO*/
  112.             List<UsuarioViewModel> resultadosViewModel = listOfObjects.MapList();
  113.  
  114.             /*Convertimos los ViewModel a Entidades*/
  115.             List<Usuario> entidadesDeViewModel = resultadosViewModel.MapToEntityList();
  116.  
  117.            
  118.             //Inicializamos el mapper con nuestra configuracion para adaptarla a DTOS
  119.             Mapper.ConfigureMapper(You are not allowed to view links. Register or Login MapperConfiguration { Name = "DTO" });
  120.  
  121.             //Convertimos el resultado de ViewModels a DTO
  122.             List<UsuarioDTO> resultadosDTO = resultadosViewModel.MapList();
  123.  
  124.             //Convetimos los DTO a entidad
  125.             var resultEntity = resultadosDTO.MapToEntityList();
  126.  
  127.             Console.BackgroundColor = ConsoleColor.Black;
  128.             Console.ForegroundColor = ConsoleColor.Green;
  129.  
  130.             Console.WriteLine("Todo correcto");
  131.             Console.ReadLine();
  132.  
  133.         }
  134.     }
  135. }
  136.  
  137.  

Les dejare el link por si quieren descargarse el proyecto completo.
You are not allowed to view links. Register or Login

Espero que les sea de ayuda, y cualquier duda, sugerencia o comentario, estoy a la espera.
Saludos.
« Última modificación: Julio 30, 2016, 12:51:12 am por ANTRAX »
El arte de crear malware, es algo que solo pocos entienden!


 

¿Te gustó el post? COMPARTILO!



Microsoft lanza Code Hunt, un juego para aprender programación

Iniciado por Alejandro9999

Respuestas: 0
Vistas: 1519
Último mensaje Junio 13, 2014, 04:18:26 pm
por Alejandro9999
[info] Ideas para encriptar ejecutables .net en runtime

Iniciado por Cyb3r2876

Respuestas: 0
Vistas: 1630
Último mensaje Enero 10, 2014, 07:45:51 am
por Cyb3r2876
Crear Aplicaciones en C# para subir videos de Youtube

Iniciado por Snifer

Respuestas: 0
Vistas: 1666
Último mensaje Febrero 24, 2011, 01:16:23 am
por Snifer
[C#] Source de un programa para completar ofertas de offerwalls.

Iniciado por ragaza

Respuestas: 0
Vistas: 260
Último mensaje Mayo 19, 2018, 03:24:39 pm
por ragaza
Clase en c# para hacer consultas a Bases de datos

Iniciado por Devilboy

Respuestas: 5
Vistas: 6596
Último mensaje Febrero 25, 2011, 08:56:10 pm
por _katze_