2011-10-01 89 views
0

我有以下類實體框架代碼的第一個關係和導航屬性?

public class Subject{ 
     public int SubjectId { get; set; } 
     public String SubjectName { get; set; } 
     public String SubjectCategory { get; set; } 
    } 

public class QuestionDescriptor { 
     public int QuestionDescriptorId { get; set; }   
     public String QuestionText { get; set; } 
     public String Answer { get; set; } 
     public int SubjectId { get; set; } 
     public virtual Subject Subject { get; set; } 
    } 

我曾嘗試使用下面的代碼配置的話,我想,一個主題可以有很多QuestionDescriptors

modelBuilder.Entity<QuestionDescriptor>() 
       .HasRequired(qd => qd.Subject) 
       .WithMany() 
       .HasForeignKey(qd => qd.SubjectId) 
       .WillCascadeOnDelete(true); 

現在我有以下問題

  1. 我做得對嗎?
  2. 我是否需要Subject類中的導航屬性?
  3. 如果我這樣做

    public class Subject { 
         public int SubjectId { get; set; } 
         public String SubjectName { get; set; } 
         public String SubjectCategory { get; set; } 
         public int QuestionDescriptorId {get;set;} 
         public virtual QuestionDescriptor {get;set;} 
        } 
    
  4. ,如果我做了以上我需要在配置和爲什麼什麼樣的變化happems?

  5. 如果我想要屬於某個特定主題的所有問題,那麼我可以通過查詢QuestionDescriptor來獲取它們,爲什麼我需要一個雙向屬性?

回答

1

1)我做了正確的嗎?

是的。

2)我是否需要Subject類中的導航屬性?

不,你不需要它。它對某些查詢有幫助,但不是必需的。

3)如果我這樣做有什麼happems ...

這是另一種關係。這將代表一對一的關係。但是,因爲你想要一個一對多的關係,你必須有一個導航收集對你的實體:

public class Subject { 
    public int SubjectId { get; set; } 
    public String SubjectName { get; set; } 
    public String SubjectCategory { get; set; } 
    public virtual ICollection<QuestionDescriptor> Descriptors {get;set;} 
} 

4)如果我做了以上我需要在配置和 爲什麼什麼樣的變化?

對於上面的更改,您可以將映射配置保持原樣 - 唯一的例外是您現在必須將集合指定爲關係的另一方。取而代之的.WithMany()使用

.WithMany(s => s.Descriptors) 

5)如果我想所有的問題屬於一個特定的主題,然後 我可以通過查詢QuestionDescriptor得到他們,那麼爲什麼我需要 雙向財產?

你不需要它。

+0

在3問題,如果我只是一個導航屬性,不會改變我的數據庫中的表結構? –

+1

@ashutoshraina:在你使用'public virtual QuestionDescriptor'的問題的例子中,是的,它會改變表結構,因爲它是一對一的關係。在我使用'public virtual ICollection Descriptors'的例子中,它不改變數據庫,因爲關係仍然是一樣的(一對多)。 – Slauma

+0

是的,你是對的。我試了一下,數據庫結構沒有改變,它使我的查詢變得簡單明瞭。非常感謝您的幫助。 –

相關問題