2012-06-13 75 views
3

這可能是一個重複的qn,但我無法得到這個場景的正確答案。我有以下表結構:EF代碼第一個父親孩子映射

public class File 
{ 
    public int FileId { get; set; } //PK 
    public int VersionID { get; set; } 

    public virtual ICollection<FileLocal> FileLLocalCollection { get; set; } 
} 

public class FileLocal 
{ 
    public int FileId { get; set; } //PK, FK 
    public int LangID { get; set; } //PK,FK 
    public string FileName { get; set; } 
} 

我沒有列入第三個表在這裏(它的基本語言標識號(PK)&的langCode) 如何指定用流利的API此映射,這樣我可以加載「FileLLocalCollection」與每個文件對象?

回答

4

你映射的第一部分是可以做到這樣:

modelBuilder.Entity<File>() 
    .HasMany(f => f.FileLocalCollection) 
    .WithRequired() 
    .HasForeignKey(fl => fl.FileId); 

modelBuilder.Entity<FileLocal>() 
    .HasKey(fl => new {fl.FileId, fl.LangId}); 

,第二部分取決於你Lang是如何定義的方式。例如,如果您添加導航屬性從FileLocalLang可以在地圖這樣說:

modelBuilder.Entity<FileLocal>() 
    .HasRequired(fl => fl.Lang) 
    .WithMany() 
    .HasForeignKey(fl => fl.LangId); 
+0

,如果關係是什麼一對一的,即不是「公共虛擬的ICollection FileLLocalCollection」如果屬性是「公共虛擬FileLocal FileLLocal「 – user396491

+0

在這種情況下,您的FileLocal必須只有FileId作爲PK,或者您的文件在其PK中也必須具有LangId。 –

+0

我現在基本上有這樣的場景。沒有LangID ..,public class文件 {0} {0} {0} public int FileId {get;組; } // PK public int VersionID {get;組; } public virtual FileDetail FileDetails {get;組; } } public class FileDetail { public int FileId {get;組; } // PK,FK public string FileName {get;組; } }。它基本上是一對一映射,FileId是第二個表的PK和FK,就像細節表一樣。現在我如何加載FileDetail與每個文件對象 – user396491