Un-à-Plusieurs relation de mappage renvoie des erreurs de validation
Édité avec la nouvelle situation par suggestion dans les commentaires:
Actuellement, j'ai cette cartographie
public ShowMap() {
ToTable("Shows");
HasKey(x => x.ShowID);
Property(x => x.ShowID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
.IsRequired()
.HasColumnName("ShowID");
}
public EpisodeMap() {
ToTable("Episodes");
HasKey(x => x.EpisodeID);
Property(x => x.EpisodeID)
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
.HasColumnName("EpisodeID");
Property(x => x.ShowID)
.IsRequired()
.HasColumnName("ShowID");
Property(x => x.EpisodeNumber)
.IsRequired()
.HasColumnName("EpisodeNumber");
}
Cette résultats dans la base de données suivante:
Toutefois, lorsque la graine méthode est exécutée je reçois cette erreur. Puisque je ne peux pas déboguer la valeur des variables à partir de la ligne de commande Update-Database
(au moins, pas autant que je sache) je ne vois pas ce que la propriété détient.
La Validation a échoué pour une ou plusieurs entités. Voir " EntityValidationErrors la propriété pour plus de détails.
Quand j'ajoute le lien vers la cartographie, je reçois l'erreur suivante:
Une ou plusieurs erreurs de validation ont été détectés au cours de la génération de modèle:
Système.Les données.De l'entité.Edm.EdmAssociationEnd: : la Multiplicité n'est pas valide dans le Rôle "Episode_Show_Source" en relation "Episode_Show'. Parce que le Rôle Dépendants fait référence à la clé des propriétés, la limite supérieure de la multiplicité des personnes Dépendantes Rôle doit être à '1'.
Relation:
HasRequired(x => x.Show)
.WithMany(x => x.Episodes)
.HasForeignKey(x => x.EpisodeID);
C'est le modèle:
public class Episode {
public int EpisodeID {get; set;}
public int ShowID {get; set;}
public int EpisodeNumber {get; set;}
public virtual Show Show { get; set; }
}
public class Show {
public int ShowID {get; set;}
public virtual ICollection<Episode> Episodes { get; set; }
}
Ce que j'ai négligé qui provoque les erreurs de validation?
Edit: juste pour être certain, je n'ai rien oublié, cette est le projet sur github.
Le caractère unique d'un enregistrement dans la table Enfant est déterminé par le ParentID et un ChildID. Le monde réel d'utilisation applicable ici est un Spectacle et de ses épisodes: Un spectacle a plusieurs épisodes, mais chaque épisode n'appartient qu'à un seul spectacle. Pourriez-vous proposer une approche différente?
Essentiellement, il semble que vous dites EF carte ChildId deux fois, comme une clé composite et FK. Supprimer la ChildId et Parent de l'id de l'POCO. EF peut comprendre cela. Et si possible de déclarer une seule et unique PK de l'Enfant (entité de semences) pour ne pas avoir à utiliser un composite.
J'ai refait mon programme, mais l'erreur persiste. J'ai mis à jour le post pour refléter les modifications.
Est-ce vraiment exactement votre modèle et de la cartographie? C'est une norme un-à-plusieurs relation que tout le monde a utilisé des centaines de fois sans problèmes. L'exception n'a aucun sens.
OriginalL'auteur Jeroen Vannevel | 2013-06-12
Vous devez vous connecter pour publier un commentaire.
C'est le problème (à partir de votre dépôt git, classe
EpisodeMap
):EpisodeID
est le PK dansEpisode
et EF attend un one-to-one mapping dans ce cas, sans uneEpisodes
de la collection, mais unEpisode
de référence à la place ("limite supérieure de la multiplicité = 1").Pour un un-à-plusieurs, il doit être:
Résolu! L'erreur a été comme il l'a dit: un validationerror. J'ai dépassé mes données de test et la cartographie et l'a remarqué le maxlength de l'une des propriétés est de 128. La graine de données contenues façon plus que cela, le mettre en 1028 résolu le problème et j'ai reçu mes données de test.
Juste un conseil pour la prochaine fois, quand vous ne pouvez pas déboguer les erreurs de validation: Appel
SaveChanges
à la fin de la Semence méthode manuellement dans un bloc try-catch et de consigner les erreurs dans un fichier, comme illustré ici: stackoverflow.com/a/16619043/270591Très bonne idée, je vais l'ajouter à mon projet. Rétrospectivement, le message d'erreur en fait m'a dit ce qui n'allait pas, je l'ai trouvé plus vite.
Pour mon E-R modèle que je n'avais pas le champ correspondant à votre
ShowID
champ dans mes classes POCO. J'ai été en utilisant le premier code de l'approche du développement. Elle fonctionne. J'étais sous l'impression que couramment l'Api de configuration sera en mesure de le réaliser sur son propre tandis que de la création de la base de données pour la première fois.OriginalL'auteur Slauma