没有外键实体框架的一对多设置

时间:2016-09-08 12:10:15

标签: c# asp.net-mvc entity-framework visual-studio entity-relationship

我有以下设计。 enter image description here 正如我们从这张图片中看到的那样,一集将有多个EpisodePatients,每个EpisodePatients都会指向一集。

以下是我对应表格的两个模型。

public class EpisodeModel
{
    public int ID { get; set; }
    public virtual EpisodePatientModel EpisodePatient { get; set; }
}
public class EpisodePatientModel
{
    public int EpisodePatientID { get; set; }
    public virtual EpisodeModel Episode { get; set; }
}

如何在EpisodeModelEpisodePatientModel

之间设置“一对多”关系

由于EpisodeModel不包含EpisodePatient的外键,我无法执行以下操作。

modelBuilder.Entity<EpisodeModel>().HasRequired(r => r.EpisodePatient).WithMany().HasForeignKey() //No foreign key

我试过这个。

modelBuilder.Entity<EpisodeModel>().HasRequired(r => r.EpisodePatient);

但是使用这种方法,从数据库加载所有EpisodePatientModel时,EpisodeModel不会加载Lazy

2 个答案:

答案 0 :(得分:2)

我明白你需要在EpisodePatient表中有一个引用Episode表Id的外键,所以我认为你可以像这样解决它:

public class EpisodeModel
{
    public int ID { get; set; }
    public virtual IEnumerable<EpisodePatientModel> EpisodePatients { get; set; }
}

public class EpisodePatientModel
{
    public int EpisodePatientID { get; set; }
    public int EpisodeID { get; set; }
    public virtual EpisodeModel Episode { get; set; }
}

然后,您的配置应该是这样的:

modelBuilder.Entity<EpisodePatientModel>().HasRequired(r => r.Episode).WithMany(e => e.EpisodePatients).HasForeignKey(r => r.EpisodeID);

答案 1 :(得分:1)

首先,您的模型并未反映您所说的内容。如果EpisodeModelEpisodePatientModel之间存在一对多关系,则您必须拥有EpisodePatientModel的集合。而且您在EpisodePatientModel

中缺少外键属性
public class EpisodeModel
{
    public int ID { get; set; }
    public virtual ICollection<EpisodePatientModel> EpisodePatients { get; set; } // Must be collection
}

public class EpisodePatientModel
{
    public int EpisodePatientID { get; set; }
    public int EpisodeID { get; set; } // Foreign key to Episode
    public virtual EpisodeModel Episode { get; set; }
}

然后在您的模型正确后,使用Fluent API进行映射很容易理解,按照您的说法进行映射:一个EpisodeModel可以有多个 EpisodePatientModel

modelBuilder.Entity<EpisodeModel>()
    .HasMany(r => r.EpisodePatients)
    .WithRequired(m => m.Episode)
    .HasForeignKey(m => m.EpisodeID);

或者你可以反映这个。添加这两个中的一个就足够了:

modelBuilder.Entity<EpisodePatientModel>()
    .HasRequired(r => r.Episode)
    .WithMany(m => m.Episode)
    .HasForeignKey(m => m.EpisodeID);