Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在没有外键实体框架的情况下设置一对多_C#_Asp.net Mvc_Entity Framework_Visual Studio_Entity Relationship - Fatal编程技术网

C# 在没有外键实体框架的情况下设置一对多

C# 在没有外键实体框架的情况下设置一对多,c#,asp.net-mvc,entity-framework,visual-studio,entity-relationship,C#,Asp.net Mvc,Entity Framework,Visual Studio,Entity Relationship,我有下面的设计。 正如我们从这张图片中看到的,一个插曲会有多个插曲患者,每个插曲患者都会指向一个插曲 这是我的两个模型对应的表格 public class EpisodeModel { public int ID { get; set; } public virtual EpisodePatientModel EpisodePatient { get; set; } } public class EpisodePatientModel { public int Episo

我有下面的设计。 正如我们从这张图片中看到的,一个插曲会有多个插曲患者,每个插曲患者都会指向一个插曲

这是我的两个模型对应的表格

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; }
}
如何设置EpisodeModel和EpisodePatientModel之间的一对多关系

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

modelBuilder.Entity<EpisodeModel>().HasRequired(r => r.EpisodePatient).WithMany().HasForeignKey() //No foreign key
我试过这个

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

但是使用这种方法,当从DB加载所有的EpisodePatientModel时,EpisodeModel不会延迟加载。首先,您的模型没有反映您所说的内容。如果EpisodeModel和EpisodePatientModel之间存在一对多关系,则必须具有EpisodePatientModel的集合。您在EpisodePatientModel中缺少外键属性:

或者你也可以将其映射到相反方向。添加这两个选项中的一个就足够了:

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

首先,你的模型没有反映你所说的。如果EpisodeModel和EpisodePatientModel之间存在一对多关系,则必须具有EpisodePatientModel的集合。您在EpisodePatientModel中缺少外键属性:

或者你也可以将其映射到相反方向。添加这两个选项中的一个就足够了:

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

我知道您需要在EpisodePatient表中有一个外键,它引用了事件表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);
然后,您的配置应如下所示:

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);

我知道您需要在EpisodePatient表中有一个外键,它引用了事件表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);
然后,您的配置应如下所示:

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);

我想知道你打算在这个问题上提出多少问题。显然你的模型错了。一对多意味着其中一方必须有一个集合,而不是一个参考。我想知道你打算在这个问题上发布多少问题。显然你的模型错了。一对多意味着其中一方必须有一个集合,而不是一个引用。虽然目前数据库中的数据存在一对多关系,但在我的代码中,我试图欺骗EF,使其认为数据之间存在一对一的关系。我正在从表中选择所有发作患者记录,并与发作表连接,因此返回的数据将起到一对一关系的作用。我不能在EpiodeModel上声明ICollection,因为我希望能够通过它更新与EpiodeModel相关的单个实体,例如,EpiodeModel.EpiodePatient=。希望这能让你sense@monstertjie_za首先,这不是一个好的选择。其次,要映射一对一关系,您需要设置modelBuilder.Entity.haoptionalR=>r.epiodePatient.WithRequiredm=>m.eption;。不需要指定外键,因为一对一关系是通过其主键映射的。但我不确定它是否有效。不,这不起作用。我将不得不重新调整它当前的工作方式虽然目前数据库中的数据存在一对多关系,但在我的代码中,我试图欺骗EF,使其认为数据之间存在一对一的关系。我正在从表中选择所有发作患者记录,并与发作表连接,因此返回的数据将起到一对一关系的作用。我不能在EpiodeModel上声明ICollection,因为我希望能够通过它更新与EpiodeModel相关的单个实体,例如,EpiodeModel.EpiodePatient=。希望这能让你sense@monstertjie_za首先,这不是一个好的选择。其次,要映射一对一关系,您需要设置modelBuilder.Entity.haoptionalR=>r.epiodePatient.WithRequiredm=>m.eption;。不需要指定外键,因为一对一关系是通过其主键映射的。但我不确定它是否有效。不,这不起作用。我将不得不调整目前的工作方式