tutorial que net migrations framework first existing español ejemplo code c# .net entity-framework ef-code-first code-first

c# - que - Entity Framework: el componente de clave foránea... no es una propiedad declarada en el tipo



entity framework ejemplo (1)

Tengo el siguiente modelo

public class FilanthropyEvent : EntityBase, IDeleteable { public int Id { get; set; } public string Name { get; set; } public DateTime EventDate { get; set; } public string Description { get; set; } public decimal Target { get; set; } public decimal EntryFee { get; set; } public bool Deleted { get; set; } public ICollection<EventAttendee> EventAttendees { get; set; } } public class Attendee : EntityBase, IDeleteable { public int Id { get; set; } public string Email { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public bool MailingList { get; set; } public bool Deleted { get; set; } public ICollection<EventAttendee> EventAttendees { get; set; } }

Eventos y asistentes es una relación de muchos a muchos, pero necesitaba otra propiedad en la asociación, así que creé una entidad de asociación.

public class EventAttendee : EntityBase { public int FilanthropyEventId { get; set; } public int AttendeeId { get; set; } public bool InActive { get; set; } public virtual Attendee Attendee { get; set; } public virtual FilanthropyEvent FilanthropyEvent { get; set; } }

Estas son las configuraciones para cada Evento y Asistente de Filantropía.

public class FilanthropyEventConfiguration : EntityTypeConfiguration<FilanthropyEvent> { public FilanthropyEventConfiguration() { HasKey(x => x.Id); Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); HasMany(x => x.EventAttendees).WithRequired(x => x.FilanthropyEvent).HasForeignKey(x => x.FilanthropyEvent); } } public AttendeeConfiguration() { HasKey(x => x.Id); Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); HasMany(x => x.EventAttendees).WithRequired(x => x.Attendee).HasForeignKey(x => x.AttendeeId); } public class EventAttendeesConfiguration : EntityTypeConfiguration<EventAttendee> { public EventAttendeesConfiguration() { HasKey(x => new {x.FilanthropyEventId, x.AttendeeId}); } }

Cuando intento inicializar la base de datos mediante el comando update-database en la consola del administrador de paquetes, aparece el siguiente error.

System.InvalidOperationException: el componente de clave foránea ''FilanthropyEvent'' no es una propiedad declarada en el tipo ''EventAttendee''. Verifique que no se haya excluido explícitamente del modelo y que sea una propiedad primitiva válida.

Me doy cuenta de que probablemente me estoy perdiendo una asignación en la clase EventAttendeesConfiguration , pero ¿cuál sería la asignación correcta para modelar esta relación?


Este codigo

HasMany(x => x.EventAttendees) .WithRequired(x => x.FilanthropyEvent) .HasForeignKey(x => x.FilanthropyEvent);

Debiera ser

HasMany(x => x.EventAttendees) .WithRequired(x => x.FilanthropyEvent) .HasForeignKey(x => x.FilanthropyEventId);