:ADO EF 코드 최초의 양방향은 다 대다 자기 참조 도전
는내 모델은 아주 간단하게 가족을 나타냅니다 나무. 스칼라 속성이 FirstName 등인 Person 클래스와 부모를 나타내는 Person 컬렉션이 이고 자식을 나타내는 Person 컬렉션이 입니다.
public class Person
{
public int id { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public DateTime? DateOfBirth { get; set; }
List<Person> children = new List<Person>();
public IList<Person> Children { get { return children; } set { children = (List<Person>)value; } }
List<Person> parents = new List<Person>();
public IList<Person> Parents { get { return parents; } set { parents = (List<Person>)value; } }
}
컨텍스트 코드
는public class DataContext : DbContext
{
public DbSet<Person> People { get; set; }
}
예상대로입니다 작성되는 데이터베이스 스키마 매우 간단합니다. PersonPersons 테이블에 대해 일대 다 2 개의 관계가있는 사람 테이블. (그런데 어쨌든 이것을 FamilyTree라는 테이블로 변경 하시겠습니까?)
그런 다음 인기있는 심슨 만화 쇼의 패밀리 트리 데이터를 사용하여 데이터베이스에 시드를 진행합니다. 나는 내가 필요한 모든 사람들을 만들고 그들을 연관시킨 다음 호머 심슨을 대표하는 사람 변수를 저장합니다.
class ProjectDBInitializer : DropCreateDatabaseIfModelChanges<DataContext>
{
protected override void Seed(DataContext context)
{
Person ph = new Person() { FirstName = "Homer", LastName = "Simpson" };
Person pm = new Person() { FirstName = "Marge", LastName = "Simpson" };
Person pb = new Person() { FirstName = "Bart", LastName = "Simpson" };
Person pl = new Person() { FirstName = "Lisa", LastName = "Simpson" };
Person phf = new Person() { FirstName = "GranPa", LastName = "Simpson" };
Person phm = new Person() { FirstName = "GranMa", LastName = "Simpson" };
Person pmf = new Person() { FirstName = "Marge Father", LastName = "Maiden" };
Person pmm = new Person() { FirstName = "Marge Mother", LastName = "Maiden" };
phf.Children.Add(ph);
phm.Children.Add(ph);
ph.Children.Add(pb);
ph.Children.Add(pl);
pb.Parents.Add(ph);
pb.Parents.Add(pm);
pl.Parents.Add(ph);
pl.Parents.Add(pm);
pm.Parents.Add(pmf);
pm.Parents.Add(pmm);
context.People.Add(ph);
context.SaveChanges();
}
}
이 문제는 데이터베이스에 무엇이 들어 왔는지를 볼 때 문제가됩니다.
Marge의 모든 가족이 삽입되었지만 Homer의 부모 (GranPa 및 GranMa)는 삽입되지 않았습니다. 나는 ph varibale이 그것들에 대한 참조를 가지지 않는다는 사실과 관련이 있다고 가정합니다.
이 문제를 해결하는 가장 좋은 방법은 무엇입니까?
Ladislav의 답변에 더 많은 것을 추가 할 생각이 있습니다. 답변을 읽고 동의하십시오. –