visual studio net mvc framework first espaƱol code asp c# asp.net-mvc-3 entity-framework ef-code-first

c# - studio - CodeFirst EF4.1 MVC contra la base de datos heredada-Conflictos de multiplicidad



entity framework visual studio 2017 (4)

Asegúrese de no utilizar HasKey () en combinación con HasOptional () en sus asignaciones. Eso estaba causando este error en mi caso.

No importa en qué forma lo mezcle, me da errores. Tengo la sensación de que me falta algo obvio ya que sigo recibiendo estos errores.

Uno o más errores de validación se detectaron durante la generación del modelo:

System.Data.Edm.EdmAssociationType:: La multiplicidad entra en conflicto con la restricción referencial en el rol ''Venue_Courses_Source'' en la relación ''Venue_Courses''. Debido a que todas las propiedades en el rol dependiente no admiten nulos, la multiplicidad del rol principal debe ser ''1''.

System.Data.Edm.EdmAssociationEnd:: La multiplicidad no es válida en la función ''Venue_Courses_Target'' en la relación ''Venue_Courses''. Como el rol dependiente se refiere a las propiedades clave, el límite superior de la multiplicidad del rol dependiente debe ser 1.

Un curso solo puede tener un lugar, los lugares pueden ser utilizados por muchos cursos

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 }


Después de buscar en la web

System.Data.Edm.EdmAssociationType:: La multiplicidad entra en conflicto con la restricción referencial en Rol

Siguió apareciendo con esta publicación así que aquí estaba mi problema y mi solución:

Actualicé un proyecto grande de ef4.0 a ef4.1 usando la extensión de ingeniería inversa vs ef. Nuestra aplicación mvc utilizaba metadatatype y parciales para decorar objetos de ef4.0.

Después de eliminar los archivos del tipo de metadato, el proyecto comenzó a funcionar.

El problema de raíz era el atributo [Requerido] ya que el objeto ef tenía anculabilidad y mi metadatatype tenía [Obligatorio] en la misma propiedad. Anteriormente se aplicaban las reglas de validación de mvc y ahora se usaba ef4.1 para completar las propiedades de navegación. Al eliminar [Requerido] del tipo de metadata, se solucionó el problema.

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; } }


Espero que esto todavía esté a tiempo para ayudarte. También estaba teniendo exactamente el mismo problema y me preocupaba durante casi una hora hasta que pude detectar mi error.

El problema es que la relación Course.Venue es opcional (como se declara en la API fluida), pero la declaración Id de Course.VenueId es obligatoria, por lo que puede hacer que VenueId sea opcional al cambiarlo a

public int? VenueId { get; set;}

o cambie la relación a obligatoria en la API fluida, y OnModelCreating se ejecutará correctamente una vez que haya cambiado eso.


He luchado con este error en mi proyecto de entidad de marco, he resuelto el problema cambiando el valor de VenueId que admite nulos.