none
Inserción de datos

    Pregunta

  • Mi problema es el siguiente eh tratado de agilizar la carga de datos poniendo estas configuraciones en el contexto:

    context.Configuration.AutoDetectChangesEnabled = false;     

    context.Configuration.ValidateOnSaveEnabled = false;


    lo que agiliza la carga de datos iniciales muchísimo el problema es que me ha pasado algo que no entiendo tengo por ejemplo esta situación:

    var employee01 = new Employee { Name = "Juan" };

    var employee02 = new Employee { Name = "Pedro" };

    context.Employee.Add(employee01);

    context.Employee.Add(employee02);

    context.Configuration.AutoDetectChangesEnabled = true;

    context.SaveChanges();

    employee01.JefeId = employee02.Id

    context.SaveChanges();

    Pero al hacer el segundo SaveChanges() este no se ejecuta correctamente. (No actualiza el campo JefeId).

    Lo que hice para que funcionara fue lo siguiente:

    var employee01 = new Employee { Name = "Juan" };

    var employee02 = new Employee { Name = "Pedro" };

    context.Employee.Add(employee01);

    context.Employee.Add(employee02);

    context.Configuration.AutoDetectChangesEnabled = true;

    context.SaveChanges();

    employee01.JefeId = employee02.Id

    context.SaveChanges();

    context.Configuration.AutoDetectChangesEnabled = false;

    Mi pregunta es como puedo mejorar para no estar activando y desactivando esa configuración. Cabe mencionar que sin esa configuración para insertar los datos tarda al rededor de 20 minutos y una vez aplicadas tarda 1 minuto.

    Espero puedan orientarme.


    martes, 3 de abril de 2018 16:23

Todas las respuestas

  • hola

    porque mapeas el JefeId  en lugar de aplicar una relaicon de navegacion usando

    public class Employee {
    
        //resto propiedades
    
        public Employee Jefe {get;set;}
    
    }

    de esta forma podrias hacer

    var employee01 = new Employee { Name = "Juan" };

    var employee02 = new Employee { Name = "Pedro" };

    employee01.Jefe = employee02;

    context.Employee.Add(employee01);

    context.SaveChanges();

    de esta forma se relacionan los ids de las entidades cuando se crean en una sola operacion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 4 de abril de 2018 20:48
  • Hola Leandro gracias por la respuesta pero independientemente de eso otro ejemplo de cuando pasa lo que mencione anteriormente es en este ejemplo

    var product01 = new Product {propiedades del producto};
    context.Product.Add(product01);
    context.SaveChanges();
    
    
    var warrantyTipe01 = new WarrantyType {propiedades de la orden};
    context.Product.Add(warrantyTipe01 );
    context.SaveChanges();
    
    

    Y aquí viene el detalle al intentar insertar en esta tabla:

    var productWarrantyType01 = new ProductWarrantyType { Product = product01, WarrantyType = warrantyType01 };
    context.ProductWarrantyType.Add(productWarrantyType01);
    context.SaveChanges();
    public class ProductWarrantyType {
        public virtual int WarrantyTypeId{get;set;}
        public virtual int ProductId{get;set;}
        public virtual Product Product{get;set;}
        public virtual WarrantyType WarrantyType{get;set;}
    }

    Y me manda el siguiente error y realmente no se están duplicando llaves:

    Conflicting changes detected. This may happen when trying to insert multiple entities with the same key.

    Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código. 

    Detalles de la excepción: System.Data.Entity.Core.UpdateException: Conflicting changes detected. This may happen when trying to insert multiple entities with the same key.

    Error de código fuente: 

    Línea 1008:                ProductWarrantyType15, ProductWarrantyType16 });
    Línea 1009:            
    Línea 1010:            context.SaveChanges();
    Línea 1011:
    Línea 1012:            #endregion


    Si quito la configuración del contexto si lo hace. No se si me puedas orientar en eso.


    viernes, 6 de abril de 2018 19:14