EF 4.1 Code First Foreign Key添加Extra列

Dir*_*irk 5 c# entity entity-framework-4.1

我有以下两个实体(很多,但这些给我的问题)

public class StartPoint
{
    public int StartPointId { get; set; }
    public string Description { get; set; }
    public int StartPointNumber { get; set; }    
    public int StartAreaId { get; set; }
    public StartArea StartArea { get; set; }
}    
Run Code Online (Sandbox Code Playgroud)

public class StartArea
{
    public int StartAreaId { get; set; }
    public string Description { get; set; }
    public ICollection<StartPoint> StartPoints { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当允许EF创建我的数据库时,它抱怨我需要关闭级联删除,因为有多个路径,我已经完成如下操作.

        modelBuilder.Entity<StartPoint>()
            .HasRequired(x => x.StartArea)
            .WithMany()
            .HasForeignKey(x => x.StartAreaId)
            .WillCascadeOnDelete(false);
Run Code Online (Sandbox Code Playgroud)

问题是,当创建数据库时,我得到两个外键,一个叫做StartAreaId,正如我所料,另一个是StartArea_StartAreaId.仅使用StartAreaId.为什么以及如何摆脱StartArea_StartAreaId.如果我在上下文中删除HasForeignKey并从实体中删除StartAreaId,我会得到多个StartArea_StartAreaId列,如StartArea_StartAreaId和StartArea_StartAreaId1.我该怎么做才能阻止这种情况发生?我只想将StartAreaId作为我的外键.

Lad*_*nka 3

问题是空的WithMany

    modelBuilder.Entity<StartPoint>()
        .HasRequired(x => x.StartArea)
        .WithMany(y => y.StartPoints)
        .HasForeignKey(x => x.StartAreaId)
        .WillCascadeOnDelete(false);
Run Code Online (Sandbox Code Playgroud)