Câu trả lời này là đề xuất thay vì câu trả lời chính xác.
Trong kịch bản thế giới thực, đây không phải là thiết kế chính xác, trước hết mọi người phối ngẫu đều có vợ/chồng cùng tham chiếu cùng một người, ví dụ như vợ/chồng của người phối ngẫu là người. Chúng tôi đã mô hình hóa điều này trong ứng dụng của chúng tôi là Persons và PeronRelations, PersonRelations có thuộc tính FromPersonID, ToPersonID và Type. Loại quy định cụ thể "Chồng < -> Wife", "Vợ < -> Chồng", "Cha < -> Sơn", "Sơn < -> Cha" vv
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
}
này mang đến cho bạn lợi thế là bạn có thể lưu trữ thêm thông tin cho mỗi mối quan hệ và điều hướng chúng theo cả hai hướng cùng với nhiều truy vấn.
Mọi mối quan hệ cũng có mối quan hệ ngược lại tương ứng. Và bạn sẽ phải viết thêm logic để duy trì mối quan hệ nghịch đảo thích hợp cũng như để cho nó hoạt động chính xác.
Và điều này rất dễ thực hiện trong khung thực thể vì nó là mối quan hệ một đến nhiều đơn giản.
Nguồn
2013-08-19 12:13:45
Cảm ơn sự giúp đỡ của bạn Ladislav – Joao