This answer is suggestion instead of an exact answer.
In real world scenario this isn't correct design, first of all every spouse has spouse as well that references same person, for example, Spouse of Spouse of Person is Person itself. We have modeled this in our app as Persons and PeronRelations, PersonRelations have FromPersonID, ToPersonID and Type property. Type specifies "Husband<->Wife", "Wife<->Husband", "Father<->Son", "Son<->Father" etc.
public class Person{
public int PersonID {get;set;}
...
public ICollection<PersonRelations> FromRelations {get;set;}
public ICollection<PersonRelations> ToRelations {get;set;}
}
public class PersonRelations{
..
public int FromPersonID {get;set;}
public int ToPersonID {get;set;}
public RelationType Type {get;set;}
public Person FromPerson {get;set;}
public Person ToPersion {get;set;}
// useful for Employment and Marriage
// durations
public DateTime? Start {get;set;}
public DateTime? End {get;set;}
}
public enum RelationType{
Husband_Wife,
Wife_Husband,
Father_Son,
Son_Father,
Friend_Friend,
Employee_Employer,
Employer_Employee
}
This gives you advantage as you can store more information per relation and navigate them in both directions along with many queries.
Every relation has corresponding opposite relation as well. And you will have to write extra logic to maintain proper inverse relation as well in order for it to work correctly.
And this is very easy to implement in Entity Framework as it is simple One to Many relation.