[英]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.