The problem is that when you have multiple relationships between two entities, EF Code First isn’t able to find out which navigation properties match up, unless, you tell it how, here is the code:
public class Client
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string ClientName { get; set; }
/****Change Nullable<int> by int?, looks better****/
public int? DefaultSurveyID { get; set; }
/****You need to add this attribute****/
[InverseProperty("ID")]
[ForeignKey("DefaultSurveyID")]
public virtual Survey DefaultSurvey { get; set; }
public virtual ICollection<Survey> Surveys { get; set; }
}
With your previous version, EF was creating that extra relationship because it didn’t know that the DefaultSurvey
property was referencing the ID
of the Survey
class, but you can let it know that, adding the attribute InverseProperty
whose parameter is the name of the property in Survey
you need DefaultSurvey
to match with.