繁体   English   中英

EF Code First,两个导航属性到同一个对象

[英]EF Code First, two navigation properties to same object

我正在使用EF Code First来查询和创建数据库。 我的一个实体(关系)具有两个到同一实体(活动)的导航属性。 我的问题是,如果我使用EF来创建数据库模式,它将创建四个外键列和约束而不是两个。

以下是相关的代码部分:

活动类:

public class Activity {
    public virtual ICollection<Relationship> Successors { get; set; }
    public virtual ICollection<Relationship> Predecessors { get; set; }
}

关系类:

public class Relationship {
    public virtual Activity Activity1 { get; set; }
    public int Activity1_ID { get; set; }
    public virtual Activity Activity2 { get; set; }
    public int Activity2_ID { get; set; }
}

关系映射类:

this.HasRequired(t => t.Activity1)
  .WithMany(t => t.Predecessors)
  .HasForeignKey(m => m.Activity1_ID)
  .WillCascadeOnDelete(false);
this.HasRequired(t => t.Activity2)
  .WithMany(t => t.Successors)
  .HasForeignKey(m => m.Activity2_ID)
  .WillCascadeOnDelete(false);

数据库结构: 在此输入图像描述

有没有办法阻止创建最后两列?

这应该只创建2个外键列。

public class Activity
{
    public int Id { set; get; }
    public virtual ICollection<Relationship> Successors { get; set; }
    public virtual ICollection<Relationship> Predecessors { get; set; }
}
public class Relationship
{
    public int Id { set; get; }
    public virtual Activity Activity1 { get; set; }
    public int Activity1_ID { get; set; }
    public virtual Activity Activity2 { get; set; }
    public int Activity2_ID { get; set; }
}

我所在的地方,指定我的关系/ FK性质的DbContext类OnModelCreating

public class MyDb: DbContext
{
    public MyDb():base("EfDbContext")
    {           
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {            
        modelBuilder.Entity<Relationship>()
            .HasRequired(f => f.Activity1)
            .WithMany(f => f.Predecessors)
            .HasForeignKey(g => g.Activity1_ID)
            .WillCascadeOnDelete(false);

        modelBuilder.Entity<Relationship>().
             HasRequired(f => f.Activity2)
            .WithMany(f => f.Successors)
            .HasForeignKey(g => g.Activity2_ID)
            .WillCascadeOnDelete(false);
    }
}

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM