CodeFirst EF4.1 MVC Contre la firebase database héritée – Conflits de multiplicité

Peu importe la façon dont je le mélange, cela me donne des erreurs. J’ai l’impression de rater quelque chose d’évident car 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 Role ‘Venue_Courses_Source’ dans la relation ‘Venue_Courses’. Toutes les propriétés du rôle dépendant étant non nullables, la multiplicité du rôle principal doit être égale à «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 de la clé, la limite supérieure de la multiplicité du rôle dépendant doit être 1.

Un cours ne peut avoir qu’un seul lieu, les lieux peuvent être utilisés par de nombreux cours

public class Course { [Key] public virtual int Id { get; set; } public ssortingng 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 ssortingng Name { get; set; } public virtual ICollection Courses { get; set; } } protected override void OnModelCreating(DbModelBuilder modelBuilder) { #region Courses //Table Alias modelBuilder.Entity().ToTable("DBSCHEMA.TR_COURSES"); //Keys modelBuilder.Entity().HasKey(c => c.Id); //Joins //Join to Venues modelBuilder.Entity().HasOptional(c => c.Venue); //Fields modelBuilder.Entity().Property(c => c.Id).HasColumnName("COURSE_ID"); modelBuilder.Entity().Property(c => c.Title).HasColumnName("CR_TITLE"); modelBuilder.Entity().Property(c => c.StartDate).HasColumnName("START_DATE"); modelBuilder.Entity().Property(c => c.VenueId).HasColumnName("VENUE_ID"); #endregion #region Venues //Table Alias modelBuilder.Entity().ToTable("DBSCHEMA.VENUES"); //Keys modelBuilder.Entity().HasKey(v => v.Id); //Joins modelBuilder.Entity().HasMany(venue => venue.Courses); //Fields modelBuilder.Entity().Property(v => v.Id).HasColumnName("VENUE_ID"); modelBuilder.Entity().Property(v => v.Name).HasColumnName("VENUE_NAME"); #endregion } 

J’espère que c’est encore à l’heure pour vous aider. J’avais aussi exactement le même problème et cela me dérangeait pendant presque une heure jusqu’à ce que je puisse repérer mon erreur.

Le problème est que la relation Course.Venue est facultative (comme Course.Venue sur l’API fluide), mais la déclaration d’ Course.VenueId de Course.VenueId est obligatoire, vous pouvez donc rendre VenueId facultatif en le changeant en

 public int? VenueId { get; set;} 

ou changer la relation à obligatoire sur l’API fluide, et le OnModelCreating devrait fonctionner correctement une fois que vous avez changé cela.

Après avoir cherché sur le Web pour

System.Data.Edm.EdmAssociationType:: la multiplicité entre en conflit avec la contrainte référentielle dans Role

Il n’arrêtait pas de parler de ce post, voici mon problème et ma solution:

J’ai mis à niveau un grand projet de ef4.0 à ef4.1 en utilisant l’extension vs ef reverse engineering. Notre application mvc utilisait des métadonnées et des partiels pour décorer des objects ef4.0.

Après avoir supprimé les fichiers du type de métadonnées, le projet a commencé à fonctionner.

Le problème principal était l’atsortingbut [Obligatoire] car l’object ef poco était nullable et mon type de métadonnées avait [Obligatoire] sur la même propriété. Auparavant, il fallait appliquer les règles de validation mvc et maintenant ef4.1 utilisait pour remplir les propriétés de navigation. La suppression du type de métadonnées [requirejs] 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 ssortingng 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; } } 

J’ai eu du mal avec cette erreur dans mon projet d’infrastructure, j’ai résolu le problème en modifiant la valeur nullable de VenueId.

Assurez-vous de ne pas utiliser HasKey () avec HasOptional () dans vos mappages. Cela causait cette erreur dans mon cas.