0

我正在尝试创建一个与其他两个实体(域、子页面)相关的实体(链接),因此链接表将有两列 ID 和 SubpageID。基本上我正在尝试创建 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 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>();
        }

    }

在解决了级联删除等问题后,我注意到链接表没有 SubpageID 列,我不知道为什么......

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

4

1 回答 1

1

嗨,我已经尝试使用 EF 4.3 和 6.01 以及创建的字段没有问题。您可以尝试执行以下操作。首先,您应该将您的两个 ICollection 链接声明为公开的。比在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);

这应该迫使你的关系

于 2013-11-12T12:29:56.487 回答