none
Error al querer hacer Update RRS feed

  • Pregunta

  • Hola, tengo un problema al querer actualizar un registro en la DB. Estoy usando EF 6.2.0 en C# con .NET 4.7.2.
    Podrán ver que las clases heredan de Entity<long>, es solo una convención para el uso de repositorios genericos, no tiene niguna propiedad adentro. Hereda "de nada" por asi decirlo.

    public class Order : Entity<long>
    {
    	public long OrderID { get; set; }
    	
    	...
    	...
    	...
    	
    	public StatusEnum Status { get; set; }
    	
    	public virtual Option Options { get; set; } = new Option();
    
    	public virtual ICollection<OrderDetail> Details { get; set; } = new List<OrderDetail>();
    }
    
    public class Option : Entity<long>
    {
    	public long OptionID { get; set; }
    	
    	...
    	...
    	...
    
    	public virtual Order Order { get; set; }
    }
    
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    	public DbSet<Order> Orders { get; set; }
    
    	public DbSet<Option> Options { get; set; }
    		
    	...
    	...
    	...
    	
    	//Configuro una relacion de 1-1, 1-0
    	modelBuilder.Entity<Order>()
    		.HasOptional(x => x.Options)
    		.WithRequired(x => x.Order);
    }
    
    using (var dbContext = new Context())
    {
    	var dbItem = dbContext.Orders.FirstOrDefault(...);
    	if (dbItem != null)
    	{
    		dbItem.Status = StatusEnum.New;
    		dbItem.Details.Add(orderDetail); // probe
    		dbContext.SaveChanges();
    	}
    }

    Cuando intento actualizar obtengo el siguiente error

    "Infracción de la restricción PRIMARY KEY 'PK_dbo.Option'. No se puede insertar una clave

    duplicada en el objeto 'dbo.Option'. El valor de la clave duplicada es (1).\r\nSe

    terminó la instrucción."

    Entiendo el error pero no lo entiendo, porque quiere agregar otro Option con la misma clave?

    Otra cosa que note es que al momento de levantar el registro de la DB, Options viene con los datos correctos, pero OrderID es 0, cuando tendria que ser 1 (En la DB tiene un 1)

    Que puede estar pasando? Gracias!

    EDITO:

    Agrego un repositorio con el ejemplo avechuche@bitbucket.org/avechuche/ef.test.git

    • Editado HajimeSaito sábado, 24 de noviembre de 2018 23:01
    viernes, 23 de noviembre de 2018 18:26