Problème de récupération de données avec une relation many to many (.Net Core Razor pages + EFCore 5)
Bonjour,
Je développe un site en .Net Razor pages avec Entity framework Core 5 et j'essaye de comprendre comment récupérer automatiquement les données de mon formulaire (model binding) quand on a une propriété issus d'une relation many to many (sans entité intermédiaire).
Par exemple si j'ai une entité Voiture et une entité Pièce avec la relation : une voiture a plusieurs pièces et une pièce est utilisée sur plusieurs voitures.
Si j'ai bien compris, depuis EFCore 5 il y a 2 façons de créer cette relation many to many :
soit avec une entité intermédiaire : Voiture - PieceVoiture - Piece
soit seulement avec les deux entités concernées : Voiture - Piece
Dans le premier cas je n'ai pas de soucis de récupération de données :
Coté entités :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public class Voiture
{
public int VoitureId { get; set; }
public string Nom { get; set; }
public List<PieceVoiture> Pieces { get; set; }
}
public class Piece
{
public int PieceId { get; set; }
public string Reference { get; set; }
public List<PieceVoiture> Voitures { get; set; }
}
public class PieceVoiture
{
public int VoitureId { get; set; }
public int PieceId { get; set; }
public Voiture Voiture { get; set; }
public Piece Piece { get; set; }
} |
Coté Razor pages :
Code:
1 2
| [BindProperty]
public Voiture Voiture {get; set;} |
Code:
<select name="Voiture.Pieces[i].PieceId"> ... </select>
il me suffit de construire mes listes déroulantes avec cette propriété name pour que les éléments sélectionnés soit automatiquement assignés à la propriété Pieces de mon modèle.
Dans le deuxième cas, cela ne fonctionne pas.
Coté entités :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class Voiture
{
public int Id { get; set; }
public string Nom { get; set; }
public List<Piece> Pieces { get; set; }
}
public class Piece
{
public int Id { get; set; }
public string Reference { get; set; }
public List<Voiture> Voitures { get; set; }
} |
Coté Razor pages :
Code:
<select name="Voiture.Pieces[i].PieceId"> ... </select>
Je n'arrive pas à trouver ce que je dois renseigner dans la propriété name pour que cela fonctionne. Selon mes essais (Voiture.Pieces[i].PieceId, Voiture.Pieces[i].PiecesId, Voiture.Pieces[i], etc...) soit il ne se passe rien soit j'ai une exception Sql parce qu'il tente d'ajouter une entrée dans Piece au lieu de PieceVoiture.
Auriez vous une idée ? Connaîtriez vous des astuces pour débugger ce processus de model binding ?