簡體   English   中英

EF6一對多流利的映射

[英]EF6 One To Many Fluent Mapping

在EF6中,鑒於這兩種方法似乎功能相同,選擇一種方法相對於另一種方法是否有任何優勢?

modelBuilder.Entity<Player>()
            .HasRequired(p => p.CurrentTeam)
            .WithMany(t => t.Players)
            .HasForeignKey(p => p.CurrentTeamId)
            .WillCascadeOnDelete(false);

是相同的

modelBuilder.Entity<Team>()
            .HasMany(t => t.Players)
            .WithRequired(p => p.Team)
            .HasForeignKey(p => p.CurrentTeamId)
            .WillCascadeOnDelete(false);

這只是個人喜好嗎?

我完全同意@CodeNotFound答案的所有觀點。 但是在一種情況下(不是與您的樣本有關),不是優先事項,而是必須選擇其中一種- 單向關系,即,當導航屬性僅存在於其中一種關系中時結束。

在這種情況下,由於EF6 Has方法需要導航屬性表達式,而With方法具有導航屬性和不具有導航屬性的重載,則您被迫從具有導航屬性的實體開始配置(相比之下,EF Core沒有這樣的要求,所以實際上優先事項)。

因此,如果您沒有集合導航屬性,則唯一的選擇是:

modelBuilder.Entity<Player>()
    .HasRequired(p => p.CurrentTeam)
    .WithMany() // <--
    .HasForeignKey(p => p.CurrentTeamId)
    .WillCascadeOnDelete(false);

以及如果您沒有參考導航屬性,分別為:

modelBuilder.Entity<Team>()
    .HasMany(t => t.Players)
    .WithRequired() // <--
    .HasForeignKey(p => p.CurrentTeamId)
    .WillCascadeOnDelete(false);

請注意,使用正確的With重載至關重要。 例如,如果您確實具有導航屬性,但未指定導航屬性,則EF會將其映射到另一個具有常規名稱的FK shadow屬性的單向關系。

這只是個人喜好嗎?

是的。 這只是個人喜好問題。

有人說: 一個球員屬於一個團隊(這是他目前的團隊)

其他人只能說: 一個團隊由許多球員組成。

對於EF,這兩種配置只是設置相同的內容: 一對多關系運輸,無論您使用哪個實體啟動配置。

只要兩個配置在說相同的事情,而只保留其中之一,就可以存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM