>我有以下两个实体医生(父母)和医生付款(孩子)
-
一种可能的方法是在DoctorPayment实体中获取Doctor对象并通过 Doctor.Name
-
但我只需要医生名称,而不是医生支付中应该由 DoctorId 映射的整个对象
我只提到了医生实体的几个属性,但它有大约 50 个属性,所以我不想在医生付款中采用医生对象
public class Doctor
{
public int Id { get; set; }
public string Name { get; set; }
public string Designation { get; set; }
public int ModifiedBy { get; set; }
}
public class DoctorPayment
{
public int Id { get; set; }
public int DoctorId { get; set; }
public decimal Amount { get; set; }
public DateTime Date { get; set; }
public int ModifiedBy { get; set; }
public Doctor Doctor { get; set; } // a possible way to take Doctor object
}
老实说,我的预感是你可能过早地优化了。除非您已经分析了您的软件并确定仅获取一个列而不是所有列对性能至关重要,否则我不会费心去优化它。
但是,要回答您的问题:您可以让 EF 检索单个列,如下所示:
var name=dbContext.Doctors.Where(d=>d.ID==DoctorId).Select(d=>d.Name)
当然,如果您经常需要访问它,您也可以将其封装在 DoctorPayment 类的只读属性中。
请注意,此方法的缺点是始终从数据库获取 Name,即使 Doctor 实体可能已经通过先前查询的延迟加载进行了预取。
这目前无法在实体框架中实现。EF 仅支持对象映射。不能使用 EF 映射单个列。
唯一可能的方法是获取整个对象(即医生)的Maping,然后您可以使用EF选择仅获取名称即
var DoctorName=DoctorPayment.Doctor.Name
db.DoctorPayment.Include(x=>x.Doctor).Where(...).Select(x=>new{docName=x.Doctor.Name,.....})
它将生成一个类似 SQL
select doctor.name,.... from doctorpayment inner join doctor on ... where ...