在某些情况下,我们可能会重复PK / FK引用,因此实体A和实体B处于PK / FK关系,但是3次。因此,实体A将具有3个FK集合,而实体B将具有3个实体引用。如何使用代码优先模板?您是否遵循实体框架模型/数据库第一种方法(EntityA,EntityA1等)的命名约定,它知道如何挂钩这些关系,还是有额外的步骤,或者是什么?
感谢。
答案 0 :(得分:2)
如果您要像这样定义类
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; }
}
如果您不想在POCO类中使用RelatedTo元数据,则可以在OnModelCreating方法中定义关系。
modelBuilder.Entity<EntityA>().HasRequired(p => p.EntityB1)
.HasConstraint((fk, pk) => fk.MySpecialFkName == pk.EntityBId);