【发布时间】:2016-03-11 15:06:00
【问题描述】:
如果我在 EF6 实体类上设置一个集合属性,我希望它包含一组来自数据库的参考数据,是否可以将 EF 配置为自动加载它,因为这两个数据库之间没有关系表?我以医生预约系统为例进行说明:
[Table]
public class Doctor
{
public Collection<Slot> AppointmentTimes { get; set; }
}
[Table]
public class Slot
{
[Column]
public DateTime StartTime { get; set; }
[Column]
public DateTime EndTime { get; set; }
}
每位医生的预约时间都相同。当前的解决方案是我认为 DbContext 中的一种 hacky 方法:
public Doctor FindDoctor(int id)
{
var doctor = this.Doctors.Find(id);
// I would rather have EF do this for me in the above Find() call
if (doctor != null)
{
foreach (var slot in this.Slots.ToList())
{
doctor.AppointmentTimes.Add(slot);
}
}
return doctor;
}
【问题讨论】:
-
当两个实体之间有明确的关系时,为什么不想声明它们之间的关系?
-
这些实体在数据库中没有关系,因此在 EF 模型中给它们一个是不合适的。这种关系应该存在于应用程序的更高层中。
-
好的,你有 Doctor & Slots,到目前为止一切顺利。这些是完全不相关的,您只能将它们作为单独的对象一起加载。您可以使用一个选择(交叉连接),但这对您没有多大帮助。我的问题是,您的模型是否完全成熟?你打算如何使用这些插槽?假设您想预约一名医生和一个空档,那么您就有了关系。我认为您需要在模型上进行更多工作并更好地发现实际关系。
标签: c# entity-framework