EF 7: la instrucción INSERT entró en conflicto con la FOREIGN KEY SAME TABLE

asp.net-mvc c# entity-framework entity-framework-core sql-server

Pregunta

Tengo una excepción cuando llamo a SaveChangesAsync. Mi arquitectura es muy simple, tengo una categoría de categoría, que contiene

public class Category {
  public Guid ID {get; set;}
  public Guid? ParentId {get; set;}
  public Category Parent {get; set;}
 [...]
}

Cuando quiero insertar una nueva categoría en la base de datos (conectada a mi aplicación ASP MVC), configuro el GUID antes de realizar la inserción. El error ocurrió cuando mi base de datos está vacía y quiero insertar la categoría principal (por lo tanto, con un Guid IdParent nulo y un padre nulo). Esto NO está sucediendo si establezco un valor padre. Puedo agregar un registro de forma manual configurando padre en Null por Visual studio.

Tengo el siguiente error:

La instrucción INSERT entró en conflicto con la restricción FOREIGN KEY SAME TABLE "FK_Category_Category_ParentId". El conflicto ocurrió en la base de datos "HT_Root", tabla "dbo.Category", columna 'ID'. La instrucción se ha terminado.

Busqué en el desbordamiento de pila una respuesta simple y no la encontré. Intento con Fluent API:

public class Category {
  public Guid ID {get; set;}
  public Guid? ParentId {get; set;}
  public Category Parent {get; set;}
 [...]
}

Pero nada cambió. Qué estoy haciendo mal ?

Respuesta aceptada

Parece que ha cambiado en EF 7 Ver este problema de github

Tratar

public class Category 
{
    public Guid ID {get; set;}
    public Guid? ParentId {get; set;}
    public Category Parent {get; set;}
    public ICollection<Categories> Children {get; set;}
}

Y

public class Category 
{
    public Guid ID {get; set;}
    public Guid? ParentId {get; set;}
    public Category Parent {get; set;}
    public ICollection<Categories> Children {get; set;}
}

También debe comprobar siempre que (si se especifica) existe el ParentId en la base de datos. Tenga cuidado de agregar Guid.Empty (00000000-0000-0000-0000-000000000000) en lugar de null ya que esto puede causar problemas.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué