Esta respuesta es sugerencia en lugar de una respuesta exacta.
En el mundo real, este no es el diseño correcto, en primer lugar, cada cónyuge tiene cónyuge que hace referencia a la misma persona, por ejemplo, el cónyuge del cónyuge de la persona es la persona misma. Hemos modelado esto en nuestra aplicación como Personas y PeronRelations, PersonRelations tienen propiedades FromPersonID, ToPersonID y Type. Tipo especifica "Marido < -> Wife", "esposa < -> marido", "Padre < -> Son", "Hijo < -> Padre", 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
}
Esto le da ventaja, ya que puede almacenar más información por relación y navegar en ambas direcciones junto con muchas consultas.
Cada relación tiene la relación opuesta correspondiente también. Y tendrá que escribir una lógica adicional para mantener una relación inversa adecuada también para que funcione correctamente.
Y esto es muy fácil de implementar en Entity Framework ya que es una relación simple de uno a muchos.
Gracias por su ayuda Ladislav – Joao