首先在实体框架代码中,若要映射导航属性,我还需要映射外键列



>假设我有一个交易对象,它有一个交易对手对象的外键。我想在我的交易对象中有一个交易对手类型的导航属性 - 我还需要在我的交易对象中具有外键列(交易对手 ID(吗?我的实验似乎表明我这样做了。我尝试在导航中添加 [ForeignKey("Counterparty Id"]],但如果没有 CounterpartyId 列,它不起作用。

不,显式 FK 属性不是必需的。如果跳过它,按照惯例,EF 在相应的数据库表中假定"Counterparty_Id"影子属性和列名。

在这种情况下,无法使用数据注释配置影子属性/列名称,因此如果要这样做,则需要使用MapKey进行流畅配置(而不是在具有显式属性时HasForeignKey(:

modelBuilder.Entity<Trade>()
.HasRequired(e => e.Counterparty) // or HasOptional if you want nullable column
.WithMany() // or WithMany(e => e.Trades) if you have inverse collection navigation property
.Map(m => m.MapKey("CounterpartyId"));

请注意,流畅配置必须准确反映模型导航/FK 属性。例如,您稍后决定将ConterpartyId属性添加到Trade对象中,您应该将Map替换为

.HasForegnKey(e => e.CounterpartyId)

最新更新