Code First CTP:多个PK或FK

时间:2010-10-12 16:20:05

标签: c# .net linq entity-framework entity-framework-4

在某些情况下,我们可能会重复PK / FK引用,因此实体A和实体B处于PK / FK关系,但是3次。因此,实体A将具有3个FK集合,而实体B将具有3个实体引用。如何使用代码优先模板?您是否遵循实体框架模型/数据库第一种方法(EntityA,EntityA1等)的命名约定,它知道如何挂钩这些关系,还是有额外的步骤,或者是什么?

感谢。

1 个答案:

答案 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);