Если бы вы определили свои классы следующим образом
public class EntityA
{
public int EntityAId { get; set; }
public virtual EntityB EntityB1 { get; set; }
public virtual EntityB EntityB2 { get; set; }
public virtual EntityB EntityB3 { get; set; }
}
public class EntityB
{
public int EntityBId { get; set; }
public string Name { get; set; }
}
EF Code First создаст две таблицы (EntityAs, EntityBs). По конвекции таблица EntityAs будет иметь первичный ключ EntityAId и три внешних ключа, связанных с EntityB, которые называются (EntityB1_EntityBId, EntityB2_EntityBId, EntityB3_EntityBId).
Однако вы можете переопределить эту конвекцию, добавив свойства для внешних ключей и добавив теги RelatedTo в свойства навигации.
Например:
public class EntityA
{
public int EntityAId { get; set; }
public int MySpecialFkName { get; set; }
[RelatedTo(ForeignKey = "MySpecialFkName")]
public EntityB EntityB1 { get; set; }
}
Если вам не нужны метаданные RelatedTo в вашем классе POCO, вы можете вместо этого определить отношение в методе OnModelCreating.
modelBuilder.Entity<EntityA>().HasRequired(p => p.EntityB1)
.HasConstraint((fk, pk) => fk.MySpecialFkName == pk.EntityBId);