I think your specific mistake in this case is that you have
[ForeignKey("TherapistId")] public int? TherapistId { get; set; }
instead
[ForeignKey("Therapist")] public int? TherapistId { get; set; }
In any case, you seem to have a few problems, maybe something like this (I just saved the properties of the relations):
public class Login { [Key] public int LoginID { get; set; } public virtual Therapist Therapist { get; set; } public virtual Patient Patient { get; set; } } public class Patient { [Key] [ForeignKey("Login")] [Display(Name = "No.")] public int PatientId { get; set; } public virtual Login Login { get; set; } // was this supposed to be optional? [ForeignKey("Therapist")] public int? TherapistId{ get; set; } public virtual Therapist Therapist { get; set; } } public class Therapist { [Key] [ForeignKey("Login")] [Display(Name = "No.")] public int TherapistId { get; set; } public virtual Login Login { get; set; } public virtual ICollection<Patient> Patients { get; set; } }
Typically, for one-to-one relationships in EF, both sides of the relationship must have the same primary key.
In fact, for what you are doing, perhaps you can try to use some kind of inheritance between Login , Patient and Therapist , because at the moment a Login can have both Patient and Therapist .
source share