none
como copiar un registro en entity framework RRS feed

  • Pregunta

  • tengo un windows form en donde selecciono un registro por medio de un datagridview

    lo que necesito hacer es poder duplicar ese registro, solo necesito cambiar el id, y la clave que son los campos unicos de la base de datos.

    como podria hacer esto???


    Cedrxz Bezarius

    martes, 18 de septiembre de 2012 21:58

Todas las respuestas

  • Hola Eduardo

    Aquí te dejo un fragmento de condigo con lo cual copias el registro.

    using (AdventureWorksEntities context =new AdventureWorksEntities())
    {
    	try
    	{
    		//En tu caso pondrias los valores de tu Datagrid
    		
    		SalesOrderDetail detail = new SalesOrderDetail
            {
                SalesOrderID = 1,
                SalesOrderDetailID = 0,
                OrderQty = 2,
                ProductID = 750,
                SpecialOfferID = 1,
                UnitPrice = (decimal)2171.2942,
                UnitPriceDiscount = 0,
                LineTotal = 0,
                rowguid = Guid.NewGuid(),
                ModifiedDate = DateTime.Now
            };
    		order.SalesOrderDetails.Add(detail);
    		context.SaveChanges();
    	}
    	catch (UpdateException ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }

    Saludos

    Aldo Flores

    @alduar

    http://alduar.blogspot.com

    miércoles, 19 de septiembre de 2012 9:52
  • que tal aldo en el codigo lo que tienes es para las inserciones seria algo muy util, 

    mi problema es que ya tengo un regirtro detailA y este lo quiero copiar a otro registro detailB el problema es que el id debe ser diferente y se maneja un clave extra que tampoco debe repetirse......

    he intentado hacerlo directo 

    SalesOrderDetail detailA = new SalesOrderDetail
    
    SalesOrderDetail detailB = detailA
    
    detailB.Clave="nuevaClave";
    
    detailB.id=nuevoId///aqui tengo el problema ya que como es un campo de id no me deja modificarlo
    
    order.SalesOrderDetails.Add(detailB);
    		context.SaveChanges();

    necesitaba saber si hay manera de hacer estodirectamente para no tomar los datos de uno en uno

    SalesOrderDetail detailB = new SalesOrderDetail
            {
                SalesOrderID = 2,
                SalesOrderDetailID = detailA.SalesOrderDetailID,
                OrderQty = detailA.OrderQty,
                ProductID = detailA.ProductID,
                SpecialOfferID = detailA.SpecialOfferID,
                UnitPrice = detailA.UnitPrice,
                UnitPriceDiscount = detailA.UnitPriceDiscount,
                LineTotal = detailA.LineTotal,
                rowguid = detailA.rowguid,
                ModifiedDate = detailA.ModifiedDate
            };

    por las molestias gracias....


    Cedrxz Bezarius

    miércoles, 19 de septiembre de 2012 15:39
  • Como es un ID los identificadores se auto genera es decir siempre es un consecutivo.

    eje 1,2,3...n....n+1.

    En este caso lo que tienes que hacer es inicializar el id con el ultimo elemento.

    De lo contrario tendrías que usar la operación Update.

    Saludos

    Aldo Flores

    @alduar

    http://alduar.blogspot.com

    jueves, 20 de septiembre de 2012 7:40
  • si tienes razon, pero, entonces no se puede copiar directamente un registro en otro son tener que hacer la asignacion campo por campo??

    Cedrxz Bezarius

    jueves, 20 de septiembre de 2012 15:20
  • si tienes razon, pero, entonces no se puede copiar directamente un registro en otro son tener que hacer la asignacion campo por campo??

    Cedrxz Bezarius

    La idea aqui no es copiar, es clonar, ya que si lo haces como lo estas haciendo, solo estas creando variables que hacen referencia a la variable de donde se creo que al final son igual ambas, aunque la clonación haria lo mismo, estarias creando 2 instancia distintas de la misma clase.

    puedes revisar este enlace. http://stackoverflow.com/questions/2185155/cloning-data-on-entity-framework.

    como tambien has mencionado de una campo autoincremental, este deberias dejar que lo asigne la base de datos cuando salves y solo coloca la clave unica que parece que tu asignas.

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    jueves, 20 de septiembre de 2012 20:01