0

J'ai une entité qui a une référence à elle-même dans une relation parent-enfant. J'ai besoin de savoir comment mettre en œuvre ce code en utilisant d'abord et couramment l'API. Voici ma classe d'entité.Comment créer une table d'auto-référencement en utilisant le code en premier?

public class MenuItem 
{ 
    public int Id { get; set; } 
    public string LinkText { get; set; } 
    public string ControllerName { get; set; } 
    public string ActionName { get; set; } 

    public MenuItem Parent { get; set; } 
    public int ParentId { get; set; } 

    private IList<Role> Roles; 
    private IList<MenuItem> ChildMenuItems; 

    public MenuItem() 
    { 
     Roles = new List<Role>(); 
     ChildMenuItems = new List<MenuItem>(); 
    } 
} 

J'ai essayé d'utiliser le code ci-dessous dans ma configuration d'entité.

HasOptional(m => m.Parent) 
       .WithMany(m => m.ChildMenuItems) 
       .HasForeignKey(m => m.ParentId) 
       .WillCascadeOnDelete(false); 

mais j'eu cette erreur -

Une ou plusieurs erreurs de validation ont été détectées lors de la génération de modèle:

Vantage.Data.EF.MenuItem_Parent:: conflits Multiplicité avec le contrainte référentielle dans Role 'MenuItem_Parent_Target' dans relation 'MenuItem_Parent'. Étant donné que toutes les propriétés dans le rôle dépendant sont non nullable, la multiplicité du rôle principal doit être '1'.

Toute aide appréciée.

Merci.

Répondre

0

Le champ ParentId doit être nullable. Vous n'êtes pas en mesure de créer un enregistrement si Parentid est requis.

il suffit de changer public int ParentId { get; set; }

-public int? ParentId { get; set; }