23

Leo un buen número de publicaciones de programadores que se ejecutan en el No se puede determinar un pedido válido para las operaciones dependientes. Las dependencias pueden existir debido a restricciones de clave externa, requisitos de modelo o valores generados en la tienda -excepción cuando se utiliza una relación de autorreferencia en Entity Framework.Relación autorreferencial/padre-hijo en Entity Framework

Estoy tratando de obtener una relación padre-hijo a trabajar:

public class Category { 
    public int CategoryId { get; set; } 
    public string Name { get; set; } 
    public int ParentId { get; set; } 
    public Category Parent { get; set; } 
    public List<Category> Children { get; set; } 
} 

Ésta es la configuración que uso (API Fluido):

Property(c => c.ParentId).IsOptional(); 
HasMany(c => c.Children).WithOptional(c => c.Parent).HasForeignKey(c => c.ParentId); 
//HasOptional(c => c.Parent).WithMany(c => c.Children).HasForeignKey(c => c.ParentId); 

Tanto el hasMany() y HasOptional () las configuraciones dan como resultado una excepción "No se puede determinar una ordenación válida para las operaciones dependientes ..." cuando intento guardar una nueva categoría como esta:

context.Categories.Add(new Category { Name = "test" }); 

No entiendo por qué EF no inserta la Categoría con un parentId nulo. La base de datos permite que la clave externa ParentId sea nula.

¿Me podría decir cómo hacerlo?

Respuesta

28

Debe definir el ParentId en la clase de categoría que anulable para utilizarlo como la propiedad de clave externa de una relación opcional:

public int? ParentId { get; set; } 

Una propiedad int no puede tomar el valor null y por lo tanto no puede representar una NULL como valor en una columna de base de datos.

+0

Gracias! Eso funciono. – Julius

+0

+1 a los dos, me alegraron el día. Thax mucho –

+0

¿Hay alguna manera de implementar esta relación padre-hijo con atributos (con fluidez)? – Shimmy