Peu importe la façon dont je le mélange, cela me donne des erreurs. J'ai le sentiment de manquer quelque chose d'évident alors que je continue à recevoir ces erreurs.
Une ou plusieurs erreurs de validation ont été détectées lors de la génération du modèle:
System.Data.Edm.EdmAssociationType:: La multiplicité entre en conflit avec la contrainte référentielle dans le rôle 'Venue_Courses_Source' dans la relation 'Venue_Courses'. Étant donné que toutes les propriétés du rôle dépendant ne peuvent pas être annulées, la multiplicité du rôle principal doit être "1".
System.Data.Edm.EdmAssociationEnd:: la multiplicité n'est pas valide dans le rôle 'Venue_Courses_Target' dans la relation 'Venue_Courses'. Étant donné que le rôle dépendant fait référence aux propriétés clés, la limite supérieure de la multiplicité du rôle dépendant doit être 1.
n cours ne peut avoir qu'un seul lieu, les lieux peuvent être utilisés par plusieurs cours
public class Course
{
[Key]
public virtual int Id { get; set; }
public string Title { get; set; }
public DateTime StartDate { get; set; }
public int VenueId { get; set; }
public virtual Venue Venue { get; set; }
}
public class Venue
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Course> Courses { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
#region Courses
//Table Alias
modelBuilder.Entity<Course>().ToTable("DBSCHEMA.TR_COURSES");
//Keys
modelBuilder.Entity<Course>().HasKey(c => c.Id);
//Joins
//Join to Venues
modelBuilder.Entity<Course>().HasOptional(c => c.Venue);
//Fields
modelBuilder.Entity<Course>().Property(c => c.Id).HasColumnName("COURSE_ID");
modelBuilder.Entity<Course>().Property(c => c.Title).HasColumnName("CR_TITLE");
modelBuilder.Entity<Course>().Property(c => c.StartDate).HasColumnName("START_DATE");
modelBuilder.Entity<Course>().Property(c => c.VenueId).HasColumnName("VENUE_ID");
#endregion
#region Venues
//Table Alias
modelBuilder.Entity<Venue>().ToTable("DBSCHEMA.VENUES");
//Keys
modelBuilder.Entity<Venue>().HasKey(v => v.Id);
//Joins
modelBuilder.Entity<Venue>().HasMany(venue => venue.Courses);
//Fields
modelBuilder.Entity<Venue>().Property(v => v.Id).HasColumnName("VENUE_ID");
modelBuilder.Entity<Venue>().Property(v => v.Name).HasColumnName("VENUE_NAME");
#endregion
}
J'espère qu'il est encore temps de vous aider. J'avais aussi exactement le même problème et je m'en occupais pendant près d'une heure jusqu'à ce que je puisse repérer mon erreur.
Le problème est que Course.Venue
la relation est facultative (comme déclaré sur l'API courante), mais la déclaration Id de Course.VenueId
est obligatoire, vous pouvez donc rendre VenueId facultatif en le remplaçant par
public int? VenueId { get; set;}
ou changez la relation en obligatoire sur l'API courante, et OnModelCreating devrait fonctionner correctement une fois que vous avez changé cela.
Après avoir recherché sur le Web
System.Data.Edm.EdmAssociationType:: la multiplicité entre en conflit avec la contrainte référentielle dans le rôle
Il n'arrêtait pas de venir avec ce message alors voici mon problème et ma solution:
J'ai mis à niveau un grand projet d'ef4.0 vers ef4.1 en utilisant l'extension d'ingénierie inverse vs ef. Notre application mvc utilisait des métadonnées et des partiels pour décorer des objets ef4.0.
Après avoir supprimé les fichiers du type de métadonnées, le projet a commencé à fonctionner.
Le problème racine était l'attribut [Obligatoire] car l'objet ef poco avait la valeur Null et mon métadatatype avait [Obligatoire] sur la même propriété. Auparavant, il fallait appliquer les règles de validation mvc et maintenant ef4.1 était utilisé pour remplir les propriétés de navigation. La suppression de [Obligatoire] du type de métadonnées a résolu le problème.
public partial class AgentAgency
{
public long OID { get; set; }
public long? AgentOID { get; set; }
public long? AgencyOID { get; set; }
public string ReinsuranceYear { get; set; }
public virtual Agency Agency { get; set; }
public virtual Agent Agent { get; set; }
}
public class AgentAgencyMetadata
{
public Int64 OID { get; set; }
[Required]
public Int64 AgentOID { get; set; }
[Required]
public Int64 AgencyOID { get; set; }
}
Assurez-vous de ne pas utiliser HasKey () en combinaison avec HasOptional () dans vos mappages. C'était à l'origine de cette erreur dans mon cas.
j'ai eu du mal avec cette erreur dans mon projet de framework d'entité, j'ai résolu le problème en changeant la valeur nullable de VenueId.