Ricevo errore quindi cercando di aggiungere AgendaType al contesto del database:
Un'eccezione non gestita di tipo 'System.InvalidOperationException' si è verificata in EntityFramework.dll Ulteriori informazioni: Il ForeignKeyAttribute sulla proprietà 'AgendaType' sul tipo 'MyDb.Agendum' non è valido. Il nome della chiave esterna "FK_Agenda_AgendaType" non è stato trovato nel tipo dipendente "MyDb.Agendum". Il valore Nome dovrebbe essere un elenco separato da virgole di nomi di proprietà di chiave esterna.
[Table("AgendaType")]
public partial class AgendaType
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public AgendaType()
{
Agenda = new HashSet<Agendum>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[StringLength(2)]
[Index("IX_AgendaType_Code", 1, IsUnique = true)]
public string Code { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Agendum> Agenda { get; set; }
}
public partial class Agendum
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int AgendaTypeId { get; set; }
[ForeignKey("FK_Agenda_AgendaType")]
public virtual AgendaType AgendaType { get; set; }
}
Tuttavia ho specificato la chiave esterna nella proprietà AgendaType, come nello schema di database fornito. Cosa non è corretto?
EDIT: dopo i commenti di OP, ho scavato un po 'di più. Secondo la spiegazione di DataAnnotations , [ForeignKey]
può essere effettivamente applicato alla proprietà di navigazione o alla proprietà della chiave, ma non entrambi allo stesso tempo (esempi nel link fornito spiegano l'utilizzo). Dovresti utilizzare l'attributo solo se il nome della chiave esterna è diverso dalla convenzione. Prendi nota che quando si fa:
[ForeignKey("FK_Agenda_AgendaType")]
public virtual AgendaType AgendaType { get; set; }
quindi la proprietà della chiave esterna int
deve essere:
public int FK_Agenda_AgendaType { get;set; }
Le parti più vecchie del post, tenute qui per documentare la storia della discussione:
Devi mettere [ForeignKey("FK_Agenda_AgendaType")]
nella proprietà AgendaTypeId, come questo:
[ForeignKey("FK_Agenda_AgendaType")]
public int AgendaTypeId { get; set; }
EDIT: sembra che il nome ForeignKey dovrebbe essere diverso:
[ForeignKey("FK_AgendaType")]
public int AgendaTypeId { get; set; }