C# 为什么EF不';是否在SQL表中创建第二个外键列?

C# 为什么EF不';是否在SQL表中创建第二个外键列?,c#,asp.net,sql,entity-framework,C#,Asp.net,Sql,Entity Framework,我试图创建一个实体(链接),它与另外两个实体(域、子页面)相关,所以链接表将有两列ID和子页面ID。基本上,我试图创建2个一对多关系,其中域对象和子页面对象可以映射到多个链接对象,每个链接对象只与一个域和子页面对象相关 链接模式 public class Link { [Key] public int LinkID { get; set; } ... [Required] public int ID {

我试图创建一个实体(链接),它与另外两个实体(域、子页面)相关,所以链接表将有两列ID和子页面ID。基本上,我试图创建2个一对多关系,其中域对象和子页面对象可以映射到多个链接对象,每个链接对象只与一个域和子页面对象相关

链接模式

 public class Link
    {
        [Key]
        public int LinkID { get; set; }

        ...

        [Required]
        public int ID { get; set; }
        public virtual Domain Domain { get; set; }
        [Required]
        public int SubpageID { get; set; }
        public virtual Subpage Subpage { get; set; }
    }
public class Domain
    {
        public int ID { get; set; }

        ...

        ICollection<Link> Links { get; set; }
    }
 public class Subpage
    {
        [Key]
        public int SubpageID { get; set; }

        ...

        [Required]
        public int ID { get; set; }
        public virtual Domain Domain { get; set; }

        ICollection<Link> Links { get; set; }

    }
域模型

 public class Link
    {
        [Key]
        public int LinkID { get; set; }

        ...

        [Required]
        public int ID { get; set; }
        public virtual Domain Domain { get; set; }
        [Required]
        public int SubpageID { get; set; }
        public virtual Subpage Subpage { get; set; }
    }
public class Domain
    {
        public int ID { get; set; }

        ...

        ICollection<Link> Links { get; set; }
    }
 public class Subpage
    {
        [Key]
        public int SubpageID { get; set; }

        ...

        [Required]
        public int ID { get; set; }
        public virtual Domain Domain { get; set; }

        ICollection<Link> Links { get; set; }

    }
公共类域
{
公共int ID{get;set;}
...
ICollection链接{get;set;}
}
子页面模型

 public class Link
    {
        [Key]
        public int LinkID { get; set; }

        ...

        [Required]
        public int ID { get; set; }
        public virtual Domain Domain { get; set; }
        [Required]
        public int SubpageID { get; set; }
        public virtual Subpage Subpage { get; set; }
    }
public class Domain
    {
        public int ID { get; set; }

        ...

        ICollection<Link> Links { get; set; }
    }
 public class Subpage
    {
        [Key]
        public int SubpageID { get; set; }

        ...

        [Required]
        public int ID { get; set; }
        public virtual Domain Domain { get; set; }

        ICollection<Link> Links { get; set; }

    }
公共类子页面
{
[关键]
public int SubpageID{get;set;}
...
[必需]
公共int ID{get;set;}
公共虚拟域{get;set;}
ICollection链接{get;set;}
}
DbContext

public class DomainAppContext : DbContext
    {
        public DbSet<Domain> Domains { get; set; }
        public DbSet<RegInfo> RegInfos { get; set; }
        public DbSet<Subpage> Subpages { get; set; }
        public DbSet<Link> Links { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
        }

    }
公共类DomainAppContext:DbContext
{
公共数据库集域{get;set;}
公共DbSet reginfo{get;set;}
公共数据库集子页面{get;set;}
公共数据库集链接{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
}
}
解决了级联删除等问题后,我注意到链接表没有子页面ID列,我不知道为什么


如何强制EF在链接表上创建SubpageID列?

您好,我已经用EF 4.3和6.01以及创建时没有问题的字段尝试了您的代码。你可以试着做下面的事情。 首先,您应该将两个ICollection链接声明为public。而不是在OnModelCreating中添加以下代码

modelBuilder.Entity<Link>()
            .HasRequired(p => p.Subpage)
            .WithMany(l => l.Links)
            .HasForeignKey(k => k.SubpageID);

modelBuilder.Entity<Link>()
            .HasRequired(p => p.Domain)
            .WithMany(l => l.Links)
            .HasForeignKey(k => k.ID);
modelBuilder.Entity()
.HasRequired(p=>p.Subpage)
.WithMany(l=>l.Links)
.HasForeignKey(k=>k.SubpageID);
modelBuilder.Entity()
.HasRequired(p=>p.Domain)
.WithMany(l=>l.Links)
.HasForeignKey(k=>k.ID);

这将迫使你们的关系对我有效。谢谢