none
Duplicar un objeto ¿cuál es la mejor manera? RRS feed

  • Pregunta

  • Buenas tengo una capa Entity donde tengo una clase llamada Producto con sus propiedades.

    En la capa de negocio necesito realizar un duplicado de productos.

    public class ProductoEntity
    {
       public int ProductoId  {get;set;}
       public DateTime FechaCreacion {get;set}
       public string Nombre {get; set;}
       public double Precio {get; set;}
    ...
    }

    En mi capa de negocio

    public static DuplicarProducto(ProductoEntity producto)
    {
       //Así?
       ProductoEntity copiaProducto = producto
    
      //Así?
      ProductoEntity copiaProcuto = new ProductoEntity()
      {
         Nombre = producto.Nombre;
         Precio = producto.Precio;
      };
    
      //Así?
      //Realizar un método de clase que realice esta operación
       ProductoEntity copiaProducto = producto.Clone();
      
    }

    ¿Podrían indicarme cúal es la mejor manera de realizar un duplicado de un objeto?

    Al usar:

       ProductoEntity copiaProducto = producto

    Si modifico copiaProducto.ProductoId = 0; también se modificaría la Id del objeto producto, no lo vuelvo a usar, pero no se si sería lo correcto.

    Un saludo.

    jueves, 8 de septiembre de 2016 7:55

Respuestas

  • hola

    podrias implementar la interfaz ICloneable

    y dentro de esta usarias el

    Object.MemberwiseClone Method ()

    de esta forma entidades como las que mencionas aplicarian perfectamente ay que un ShallowCopy() va perfecto

    ahora si la entidad se relaciona con otras entidades, ya es mas complejo alli deberias usar serializacion/deserializacion a xml

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta dudasc viernes, 9 de septiembre de 2016 6:22
    jueves, 8 de septiembre de 2016 11:14
  • hola

    >>Mi entidad tiene relaciones pero con duplicar la entidad me sobraría.

    si tiene relaciones con otras entidades este tipo de clonado usando el MemberwiseClone no aplicara a las relaciones

    Deep Copy of Object in C#

    implementa el punto 1

    Nota: recuerda implementar la interfaz ICloneable


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta dudasc viernes, 9 de septiembre de 2016 6:22
    jueves, 8 de septiembre de 2016 16:36

Todas las respuestas

  • hola

    podrias implementar la interfaz ICloneable

    y dentro de esta usarias el

    Object.MemberwiseClone Method ()

    de esta forma entidades como las que mencionas aplicarian perfectamente ay que un ShallowCopy() va perfecto

    ahora si la entidad se relaciona con otras entidades, ya es mas complejo alli deberias usar serializacion/deserializacion a xml

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta dudasc viernes, 9 de septiembre de 2016 6:22
    jueves, 8 de septiembre de 2016 11:14
  • Que sería en mi capa Entity:


    public class ProductoEntity
    {
       public int ProductoId  {get;set;}
       public DateTime FechaCreacion {get;set}
       public string Nombre {get; set;}
       public double Precio {get; set;}
    ...
    
       public ProdutoEntity Clone()
       {
           return (ProductoEntity)this.MemberwiseClone();
       }
    
    }


    Y en la capa de negocio:

    public static bool DuplicarProducto(ProductoEntity producto)
    {
       ProductoEntity copiaProducto = producto.Clone();
       copiaProducto.ProductoId = 0;
    ...
    }

    Mi entidad tiene relaciones pero con duplicar la entidad me sobraría.

    ¿Es correcto lo que indico? Muchísimas gracias Leandro.

    jueves, 8 de septiembre de 2016 12:00
  • hola

    >>Mi entidad tiene relaciones pero con duplicar la entidad me sobraría.

    si tiene relaciones con otras entidades este tipo de clonado usando el MemberwiseClone no aplicara a las relaciones

    Deep Copy of Object in C#

    implementa el punto 1

    Nota: recuerda implementar la interfaz ICloneable


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta dudasc viernes, 9 de septiembre de 2016 6:22
    jueves, 8 de septiembre de 2016 16:36