IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET MVC Discussion :

Problème d'association zero-to-many


Sujet :

ASP.NET MVC

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Points : 38
    Points
    38
    Par défaut Problème d'association zero-to-many
    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à

    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:	}
    Le schéma est le suivant

    Ma classe Card

    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>();
    		}
    	}
    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
     
    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;
    		}
    	}
    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
    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();
    Sachant que ma liste de classe sera fixe au final et qu'une carte peut avoir 0 ou plusieurs classes.

    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

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Points : 38
    Points
    38
    Par défaut
    J'ai trouvé au final

    Pour ceux que ça intéresseraient, il fallait que je mette une collection de carte associée à la classe pour que cela marche

    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
     
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    		public int ClasseID { get; set; }
     
    		public string Name { get; set; }
    		public string Logo { get; set; }
    		public string Slug { get; set; }
     
    		public virtual ICollection<Card> Cards { get; set; }
     
    		public Classe() {
    			Cards = new List<Card>();
    		}
    		public Classe(int id = -1, string name = "", string logo = "", string slug = "") 
    		{
    			ClasseID = id;
    			Name = name;
    			Logo = logo;
    			Slug = slug;
    			Cards = new List<Card>();
    		}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/01/2013, 11h16
  2. [MCD] Problème d'association / cardinalités
    Par touronster dans le forum Schéma
    Réponses: 12
    Dernier message: 09/02/2008, 18h19
  3. problème d'association de macro a un bouton de ma commandbar
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/07/2007, 23h49
  4. requete hql sur association one to many avec inner class
    Par austin P. dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/06/2007, 11h56
  5. Réponses: 1
    Dernier message: 09/05/2006, 15h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo