EF的主细节结构

时间:2013-03-15 15:49:15

标签: asp.net-mvc entity-framework asp.net-mvc-4

我的mvc模型中有以下类,我正在使用EF

 public class Patient
    {
        [Key()]
        public int PatientId { get; set; }
        public string Name { get; set; }
     }

public class Treatment
    {
        [Key()]
        public int Id { get; set; }

        [ForeignKey("Patient")]
        public int PatientId { get; set; }
        public Patient Patient { get; set; }

        [DataType(DataType.DateTime)]
        public DateTime TreatmentDate { get; set; }
}

我想显示患者的姓名,并在同一行显示他们接受的治疗次数。

我能想到的两种解决方案,但寻找更优雅的东西:

  1. 迭代我的患者并为每个计数治疗
  2. 小组治疗和计数。然后在该结果与患者之间加入。
  3. 谢谢!

3 个答案:

答案 0 :(得分:1)

public class Patient
{
    [Key()]
    public int PatientId { get; set; }
    public string Name { get; set; }
    public ICollection<Treatment> Treatments
 }

在您看来;

@foreach(var item in Model)
{
    <h1>@item.Name</h1>
    <h2>@item.Treatment.TreatmentDate
}
在您的查询中

;

db.EntityName.Select(p=> new Treatment()
{
    PatientId = p.PatientId,
    .....
...
    Treatments = p.Treatments
});

答案 1 :(得分:1)

最后我找到了答案 - 这很简单!!!

db.Patients.Include("Treatments").ToList()

然后在我看来我只是做

@Html.DisplayFor(modelItem => item.Treatments.Count)

答案 2 :(得分:0)

您应该将ViewModel用于您的视图。我认为这是更好的做法。在这里你可以阅读它:What is ViewModel in MVC?。基本上它是简单的类,只有您的视图所需的这些属性。我不太了解你的模型,但我会做这样的事情

    public class Patient
    {

        public int Id { get; set; }// if it's Id it's default Primery Key
        public string FirstName { get; set; }
 public string LastName { get; set; }
     }

public class Treatment
    {

        public int Id { get; set; }// if it's Id it's default Primery Key


        public Patient IdPatient { get; set; } // Your Foreign key

        [DataType(DataType.DateTime)]
        public DateTime TreatmentDate { get; set; }
}
有了这个,一个病人可能会有一个以上的治疗日期。我不是专业爱好者。祝你好运。