Asp.net mvc 使用EF的主细节结构
在我的mvc模型中,我有以下几个类,我使用的是EFAsp.net mvc 使用EF的主细节结构,asp.net-mvc,entity-framework,asp.net-mvc-4,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; }
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; }
}
我想在同一行显示患者的姓名以及他们接受治疗的次数
我能想到的两种解决方案,但都在寻找更优雅的:
谢谢 您应该在视图中使用ViewModel。我认为这是更好的练习。在这里你可以阅读:。基本上,它是一个简单的类,只有视图所需的这些属性。我不太了解你的模型,但我会这样做
public class Patient
{
[Key()]
public int PatientId { get; set; }
public string Name { get; set; }
public ICollection<Treatment> Treatments
}
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; }
}
这样,一名患者可能有一个以上的治疗日期。我不是职业选手,只是狂热者。祝你好运。我终于找到了答案——答案很简单
db.Patients.Include("Treatments").ToList()
在我看来,我就是这么做的
@Html.DisplayFor(modelItem => item.Treatments.Count)
我不明白你的疑问。db是不可枚举的,那么如何“选择”以及什么是ViewModel?抱歉,我错过了表名:Dviewmodel只是自定义ViewModel的一个名称,例如,在您的情况下,它是一种处理方法。viewmodel是类的一种特殊类型,它只能将所需的数据传递给视图,但对我来说仍然没有意义。我需要返回到我的视图患者对象,包括治疗。有两件事我很困惑。1.我的Patient类中有Treatments属性,我不明白为什么它不会自动填充。2.在您的建议中-我返回匿名类型,但我不确定如何将其绑定到我的视图。请参见此。我希望这有帮助:谢谢,但这是一对一的。一名患者可以接受多种治疗。我需要显示一个带有患者数据+他接受治疗次数的网格。
db.Patients.Include("Treatments").ToList()
@Html.DisplayFor(modelItem => item.Treatments.Count)