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, 03 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, 04 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, 06 de abril de 2018 19:14