C# 为什么EF不';是否在SQL表中创建第二个外键列?
我试图创建一个实体(链接),它与另外两个实体(域、子页面)相关,所以链接表将有两列ID和子页面ID。基本上,我试图创建2个一对多关系,其中域对象和子页面对象可以映射到多个链接对象,每个链接对象只与一个域和子页面对象相关 链接模式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 {
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);
这将迫使你们的关系对我有效。谢谢