在Entity Framework代码中,首先要映射导航属性,我还需要映射外键列

时间:2017-07-09 10:12:27

标签: entity-framework-6

假设我有一个Trade对象,它有一个Counterparty对象的外键。我希望在我的Trade对象中有一个Counterparty类型的导航属性 - 我还需要在Trade对象中使用外键列(CounterpartyId)吗?我的实验似乎表明我做了。我尝试在导航中添加[ForeignKey(“CounterpartyId”)但如果没有CounterpartyId列则无法使用。

1 个答案:

答案 0 :(得分:3)

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

在这种情况下,无法使用数据注释配置阴影属性/列名称,因此如果您想这样做,则需要使用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)