Этот ответ является предложением, а не точным.
В сценарии реального мира это неправильный дизайн, в первую очередь, у каждого из супругов есть супруг, который также ссылается на одно и то же лицо, например, Супруг (а) супруга лица - это само лицо. Мы смоделировали это в нашем приложении как Persons и PeronRelations, PersonRelations имеют свойство FromPersonID, ToPersonID и Type. Тип определяет "муж <-> жена", "жена <-> муж", "отец <-> сын", "сын <-> отец" и т. Д.
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
}
Это дает вам преимущество, поскольку вы можете хранить больше информации по каждому отношению и перемещаться по ним в обоих направлениях вместе со многими запросами.
Каждое отношение имеет также соответствующее противоположное отношение. И вам придется написать дополнительную логику, чтобы поддерживать правильные обратные отношения, а также для правильной работы.
И это очень легко реализовать в Entity Framework, так как это простое отношение Один-ко-многим.