我的域模型是Trade
可以有多个TradeLeg
。我正在尝试使用以下映射。
贸易地图
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");
当我尝试选择某些交易时,我得到了Excpetion。
列名
Trade_TradeId
无效。
我可以通过在TradeLeg上添加导航属性来进行交易,并将.WithRequired(u => u.Trade).HasForeignKey(u =>u.TrdId)
添加到HasMany()
对象上的Trade
映射中。
但是,我不希望TradeLeg
上的导航属性返回Trade
。我只想在TrdId
上拥有一个int FK属性(TradeLeg
)。我还注意到,如果我使用TradeId
代替TrdId
作为TradeLeg
上的FK属性,它也会因默认规则而起作用。有没有办法告诉EF HasMany()
另一边的FK字段的名称。
答案 0 :(得分:1)
映射应该适用于使用Trade
的{{1}}对象。像下面这样的东西应该有效。
HasMany()
我刚刚在我的一个映射对象上对EF6进行了测试,似乎可以正常工作。
如果您希望孩子在父母身上没有导航属性,例如
,那么同样的概念可以以另一种方式工作HasMany(t => t.TradeLegs)
.WithRequired() //use WithOptional for optional no need to specify the mapping on the other side.
.HasForeignKey(leg => leg.TrdId);