2011-08-23 64 views
1

有兩種方法可以映射兩個表之間具有鏈接(連接)表的一對多關係嗎?實體框架代碼與鏈接表的第一個一對多關係映射

+0

我發現你的老問題更好,至少它提供了更多的字段:http ://stackoverflow.com/q/7064796/270591 – Slauma

+0

正確,但沒有迴應。我無法相信這種情況非常罕見。 – Minnie

+2

在您的舊問題上做一些小改動,將問題推到活動問題之上。我認爲這是一種更好的方式,而不是再次創建完全相同的問題,但使用更少的上下文。或者更好:在你的舊問題中提供額外的信息和澄清,這可能會提高你獲得答案的機會。 – Slauma

回答

0

爲什麼你會有一個一對多關係的連接表?所有你需要的是從一個到另一個的外鍵。只有多對多關係才需要連接表。

+0

你說得很對,但我確實有這個鏈接表。 – Minnie

+0

那麼,如果你已經有了一個現有的數據庫模型,爲什麼你要使用代碼優先?代碼優先是針對您希望根據您的對象模型**從頭開始創建數據庫的情況**,並將根據支持您的對象模型的最佳方式創建數據庫。你所要做的不是支持你的對象模型的最佳方式。 –

+0

那麼你會建議哪種方法?我確實從數據庫開始,但首先發現代碼允許更多的靈活性。這是新的項目,並有新的數據庫,儘管數據庫和代碼同時開發,但有一些差異(其中之一是,如果有一對多或多對多的關係,鏈接表被創建)。 – Minnie

1

從概念上講,一對多關係只是多對多的特殊情況。使用代碼(第一種)方法,我們可以完全相同,定義多對多關係的簡化版本。使用 在Entity Framework Tutorial使用的同樣的例子,假設一個一對多的關係,從StudentCourse,我們將有:

public class Student 
{ 
    public Student() { } 

    public int StudentId { get; set; } 
    public string StudentName { get; set; } 

    public virtual ICollection<Course> Courses { get; set; } 
} 

public class Course 
{ 
    public Course() { } 

    public int CourseId { get; set; } 
    public string CourseName { get; set; } 

// We don't need this side of the relationship 
// public virtual ICollection<Student> Students { get; set; } 
} 

... 

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Student>() 
       .HasMany<Course>(s => s.Courses) 
       .WithMany(/* c => c.Students */) // 'WithMany' goes empty 
       .Map(c => { 
        c.MapLeftKey("Student_id"); 
        c.MapRightKey("Course_id"); 
        c.ToTable("StudentAndCourse"); 
       }); 

    base.OnModelCreating(modelBuilder); 
} 
相關問題