1
我的域模型是Trade
可以有很多TradeLeg
s。我正在嘗試使用以下映射。在Entity Framework 6中,如何創建一個具有導航屬性的另一方的一對多映射?
貿易映射
HasKey(t => t.TradeId);
Property(t => t.TradeId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
.HasColumnName("TradeId");
Property(t => t.Description).HasColumnName("Description");
Property(t => t.CounterpartyId).HasColumnName("CounterpartyId");
Property(t => t.Quantity).HasColumnName("Quantity");
Property(t => t.IsActive).HasColumnName("IsActive");
HasMany(t => t.TradeLegs);
ToTable("Trade");
貿易腿映射
HasKey(t => t.TradeLegId);
Property(t => t.TradeLegId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
.HasColumnName("TradeLegId");
Property(t => t.TrdId).HasColumnName("TrdId"); // FK back to trade
Property(t => t.Ordinal).HasColumnName("Ordinal");
Property(t => t.Description).HasColumnName("Description");
ToTable("TradeLeg");
當我嘗試選擇一些行業我得到的錯誤時拋出。
列名無效
Trade_TradeId
。
我可以把它加在TradeLeg導航屬性回到貿易和增加.WithRequired(u => u.Trade).HasForeignKey(u =>u.TrdId)
我HasMany()
映射Trade
對象上工作。
但是,我不想有TradeLeg
導航屬性返回Trade
。我只想在TradeLeg
上有一個int FK屬性(TrdId
)。我還注意到,如果我使用TradeId
而不是TrdId
作爲TradeLeg
上的FK屬性,那麼它也會因默認規則而起作用。有沒有辦法告知EF HasMany()
另一側的FK字段的名稱。
非常感謝的快速反應。我已經嘗試在兩側都存在導航屬性的情況下,在兩側都使用空與子句,並且一切似乎按預期工作。將反向導航屬性添加到with子句有什麼好處?如果不是,我可能會在一週之內離開with子句總是空的。 – Shane
國際海事組織我嘗試和明確表達如何設置導航屬性,並通過省略他們我告訴其他開發人員(和我自己),故意沒有反向導航屬性。現在有些情況下,反過來可能有多個「可以」導航的屬性。假設一個實體對兩個相同類型的實體有一個導航屬性。這不會沒有指定您的實際屬性。一個例子是一個孩子的兩個(可選)父實體。如果你有'ParentA'和'ParentB'兩個相同的類型,那麼如果沒有導航屬性設置,這將無法正常工作。 – Nico
爲了傳達意圖而採取的一點,但在你提到的情況下,我認爲應該可以對父母雙方都有導航屬性,並且在映射中仍然有空的子句,但是當你嘗試去做時可能會出現問題用linq查詢,你想引用相關的實體。你是這個意思嗎? – Shane