gpt4 book ai didi

c# - 在没有外键 Entity Framework 的情况下设置一对多

转载 作者:太空宇宙 更新时间:2023-11-03 23:10:30 24 4
gpt4 key购买 nike

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

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

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 不会延迟加载

最佳答案

首先你的模型并没有反射(reflect)你所说的。如果 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 可以有 many 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);

关于c# - 在没有外键 Entity Framework 的情况下设置一对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39390536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com