我已經踢上ADO EF代碼第一次輪胎,並拿出了以下問題:ADO EF代碼第一次雙向許多一對多的自我參照的挑戰
我的模型很簡單,代表一個家庭樹。 它由一個具有幾個標量屬性的人物類名字等組成, 表示父母的人物集合和 另一個表示兒童人物集合。
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; }
}
時生成爲預期的數據庫架構。 人員表與2個名爲PersonPersons的表的一對多關係。 (順便說一下,是否有改變這個名爲FamilyTree的表?)
然後,我開始使用一些數據種子數據庫,這是一個流行的辛普森卡通節目的家譜。 我創建了我需要的所有人,將它們關聯起來,然後保存代表Homer Simpson的人物變量。
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的家庭,但荷馬的父母(GranPa和GranMa)沒有。 我認爲這與這個事實有關,即即使他們在他們的Children集合中引用它,ph varibale也沒有提及它們。
什麼是解決這個問題最好的(最簡單的)方法?
我已經注意到更多要添加到拉迪斯拉夫的答案,請閱讀並接受它作爲答案:) – 2011-04-22 22:02:16