我正在尝试创建一个与其他两个实体(域,子页面)相关的实体(链接),因此链接表将具有两列ID和SubpageID。基本上我正在尝试创建2个一对多关系,其中Domain对象和Subpage对象可以映射到许多Link对象,每个Link对象只与一个Domain和Subpage对象相关。
链接模型
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; }
}
的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>();
}
}
解决Cascade Delete等问题后,我注意到Link Table没有SubpageID列,我不明白为什么......
如何强制EF在链接表上创建SubpageID列?
答案 0 :(得分:1)
您好我已经尝试使用EF 4.3和6.01以及创建的字段没有问题。您可以尝试执行以下操作。 首先,您应该将两个ICollection Links声明为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);
这会强迫你的关系