2011-11-02 112 views
3

我有以下表格:國家,語言和Country2LanguageEF代碼第一:許多一對多+附加屬性

Country2Language是創建M上的鏈接表:這是使用流利的映射M的定義關係:

mb.Entity<Country>()        
    .HasMany(e => e.Languages) 
    .WithMany(set => set.Countries)     
    .Map(mc => 
     { 
      mc.ToTable("Country2Language"); 
      mc.MapLeftKey("CountryShortName"); 
      mc.MapRightKey("LanguagesID");        
     } 
    ); 

我的問題:如何添加額外的DateTime「DateCreated」屬性?

+1

另一個例子:http://stackoverflow.com/questions/7050404/create-code-first-many-to-many-with-additional-fields-in-association-table/7053393#7053393基本上這意味着你無法將此映射爲多對多關係。相反,您需要兩個一對多的關係,其間還有一個額外的實體。 – Slauma

回答

1

將它的工作與創建列創建表,然後在數據庫中的默認值設置爲GETTIME功能(或W/E是)?然後,只需使用左/右映射,讓數據庫自動處理創建的默認值?

我曾經遇到過問題,如果你不指定列是db生成的值,EF想要在列中插入null,但事實上這是一個多對多的關係,它可能wouldn甚至不知道它在那裏,應該始終讓它成爲默認設置。

+0

很高興這是一個簡單的工作,而不必承擔責任以手動維持多對多關係。 –

1

您必須爲映射到表的映射創建一個實體。

public class Country2Language { 
    [Key] 
    [Column(Order = 0)] 
    [ForeignKey("CountryShortName")] 
    public int CountryShortname{ get; set; } 

    [Key] 
    [Column(Order = 1)] 
    [ForeignKey("LanguagesID")] 
    public int LanguagesID { get; set; } 

    public DateTime DateCreated {get; set;} 
} 
+0

你的意思是我必須添加類(實體)Country2Language到我的項目只有一個屬性「DateCreated」? – Mike

+0

@Mike - 不,你也必須包含外鍵,但如果你願意,你仍然可以流利地映射它們。 –

+2

@Mike - 順便說一下,一個很棒的工具是Entity Framework Power Tools CTP1。你可以用你想要的結構創建一個示例數據庫,然後用它來反向工程,使其代碼優先。這將讓你看到它應該如何在你的真正的代碼第一個模型中定義。 –