Bonjour à tous,
J'imagine que le titre n'ai pas forcément très parlant, mais j'ai un problème qui vous paraîtra simple mais que je trouve compliqué.
J'ai commencé depuis peu à essayé de programmer en ASP .Net et après quelques lectures, je me suis lancé dans la création d'un petit site pour recenser les cartes d'un jeu. Jusque là c'est simple
Mon problème se produit lorsque j'essaie de remplir ma base de données pour débugger et j'obtiens un message dans ce goût là
Le schéma est le suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Multiplicity constraint violated. The role 'Card_Classes_Source' of the relationship 'TestDatabase.Models.Card_Classes' has multiplicity 1 or 0..1. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.InvalidOperationException: Multiplicity constraint violated. The role 'Card_Classes_Source' of the relationship 'TestDatabase.Models.Card_Classes' has multiplicity 1 or 0..1. Source Error: Line 153: cards[2].Classes.Add(classes[1]); Line 154: cards[2].Classes.Add(classes[2]); Line 155: context.SaveChanges(); Line 156: } Line 157: }
Ma classe Card
Ma classe Classe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 public class Card { public int CardID { get; set; } [Required(ErrorMessage = "The card name is required.")] [MaxLength(250, ErrorMessage = "The card name cannot be longer than 250 characters.")] [Display(Name = "Nom")] public string Name { get; set; } [Required(ErrorMessage = "The card level is required.")] [Range(0, 6, ErrorMessage = "Le niveau de la carte doit être entre 0 et 6.")] [Display(Name = "Niveau")] public int Level { get; set; } [Required(ErrorMessage = "The card url is required.")] [MinLength(50, ErrorMessage = "The card url must contains at least 50 characters.")] [MaxLength(300, ErrorMessage = "The card url cannot be longer than 300 characters.")] [Display(Name = "Carte")] public string URL { get; set; } [Display(Name = "Classes")] public virtual ICollection<Classe> Classes { get; set; } public Card() { Classes = new List<Classe>(); } }
Et voici ce que je fais pour initialiser dans la méthode Seed de mon DropCreateDatabaseIfModelChanges
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public class Classe { [DatabaseGenerated(DatabaseGeneratedOption.None)] public int ClasseID { get; set; } public string Name { get; set; } public string Logo { get; set; } public Classe() { } public Classe(int id = -1, string name = "", string logo = "") { ClasseID = id; Name = name; Logo = logo; } }
Sachant que ma liste de classe sera fixe au final et qu'une carte peut avoir 0 ou plusieurs classes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 /// Classes var classes = new List<Classe> { new Classe (1, "Combattant", "/Content/combattant.png"),, new Classe (2, "Mage", "/Content/mage.png"), new Classe (3, "Prêtre", "/Content/pretre.png"), }; classes.ForEach(s => context.Classes.Add(s)); context.SaveChanges(); /// Cards var cards = new List<Card> { new Card {Name = "Perso 1", Level = 5, URL = "/Content/Perso.png"}, new Card {Name = "Perso 2", Level = 6, URL = "/Content/Perso.png"}, new Card {Name = "Perso 3", Level = 5, URL = "/Content/Perso.png"} }; cards.ForEach(s => context.Cards.Add(s)); context.SaveChanges(); cards[0].Classes.Add(classes[0]); cards[0].Classes.Add(classes[1]); cards[1].Classes.Add(classes[1]); cards[2].Classes.Add(classes[1]); cards[2].Classes.Add(classes[2]); context.SaveChanges();
Je n'arrive pas à comprendre ce qui ne vas pas
Comme je vous l'ai dit, ça peut paraître bête, mais là je bloque vraiment.
En espérant que vous pourrez m'aider.
Merci d'avance de votre aide
Partager