2017-07-13 64 views
1

使用最新的實體框架我有一個一對多的機智只有一個導航屬性在許多方面。只有一個導航屬性的實體框架一對多:WithRequiredDependant?

MSDN: Entity Framework Fluent API - Relationships指出:

單方向(也稱爲單向)的關係是當 導航屬性上只的關係的一個限定的端部 ,而不是兩者。

簡體:a School有很多Students;有學校和學生之間的一個一對多的關係,但學校並沒有包含學生

class Student 
{ 
    public int Id {get; set;} 
    // a Student attends one School; foreign key SchoolId 
    public int SchoolId {get; set;} 
    public School School {get; set;} 
} 

class School 
{ 
    public int Id {get; set;} 
    // missing: public virtual ICollection<Studen> Students {get; set;} 
} 

在雙向關係的集合的屬性,你可以寫在下面流利的API OnModelCreating

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Student>() 
     .HasRequired(student => student.School) 
     .WithMany(school => school.Students) 
     .HasForeignKey(student => student.SchoolId); 
} 

由於缺乏School.Students的,我需要做些額外的事情。根據一開始的鏈接,似乎我必須做些什麼WithRequiredDependant

// Summary: 
//  Configures the relationship to be required without a navigation property 
//  on the other side of the relationship. The entity type being configured will 
//  be the dependent and contain a foreign key to the principal. The entity type 
//  that the relationship targets will be the principal in the relationship. 
// 
public ForeignKeyNavigationPropertyConfiguration WithRequiredDependent(); 

modelBuilder.Entity<Student>() 
    .HasRequired(student => student.School) 
    .WithRequiredDependent(); 

唉,這是行不通的。 SchoolId不是建模的外鍵。

我需要什麼流利的API?

+0

你嘗試'WithRequiredPrincipal',而不是'WithRequiredDependent'? – Fabiano

+0

「使用最新的...」 - 最好清楚確切的版本,以及它是否是Core。這個問題在幾個月內應該還是有意義的。 –

+0

當然,我嘗試了WithRequired ...,我沒有提到,因爲問題已經這麼久了。對於「最新」,我的意思是我準備更新我需要的任何版本,以防止這樣的答案:「如果您將升級到版本...您可以使用...」 –

回答

1

我希望我有權利的版本/版記:

modelBuilder.Entity<Student>() 
    .HasRequired(student => student.School) 
    //.WithMany(school => school.Students) 
    .WithMany() 
    .HasForeignKey(student => student.SchoolId); 
+0

就是這樣:WithMany()不帶參數!它與RequiredPrincipal和RequiredDependant無關。我發現這是用於必需的:所需的關係(是一對一嗎?) –