c# - 如何使用原始 SQL 查询在 .net 核心中检索具有相关实体的实体?
问题描述
我有以下型号,Visit.cs
和Prescription.cs
. 我想获取包含相关处方的每个实例的所有访问行。我使用以下 EF Core 查询,但该medicines
字段始终为空。我使用 postgresql 作为数据库。我应该怎么办?
访问.cs:
public class Visit
{
public int patient_id { get; set; }
public DateTime visit_date { get; set; }
public int doctor_id { get; set; }
public int prescription_id { get; set; }
public ICollection<Prescription> prescriptions { get; set; }
}
处方.cs:
public class Prescription
{
public int prescription_id { get; set; }
public string medicine { get; set; }
public Visit Visit { get; set; }
}
和我的查询:
var visits = dbContext.Visits
.FromSqlRaw("select * from visit natural join prescription")
.ToList();
解决方案
他们确实提供了一个示例,说明如何通过组合原始查询来包含相关数据:
var visits = dbContext.Visits
.FromSqlRaw("select * from visit")
.Include(v=>v.prescriptions)
.ToList();
我还强烈建议您不要在任何查询中使用 *。列出您需要返回的列。使用 * 将导致数据库返回所有列,甚至是您不想要的列。强制数据库返回未使用的列可能会导致它不使用它本来可以使用的索引,或者导致数据库执行它确实不需要执行的行搜索。一个很好的例子是 DBA 为 CreateDate、UpdateDate、CreateUser、UpdateUser 和/或 RowVersion 等内容添加列,以帮助进行更改跟踪或复制。
推荐阅读
- ruby-on-rails - 如何在没有 gmail 剪辑电子邮件的情况下在电子邮件页脚中显示版权符号?
- sql-server - SQL Server 为什么在为引用表中没有匹配键创建外键约束时出现错误?
- amazon-web-services - AWS EC2 实例定期删除安全组
- r - 如何将变量和数据集作为 R 函数中的单独输入输入?
- web-scraping - 如何在 requests.post() 中生成 Python XHR 请求
- python - 如何使用 Python 的 ipaddress 模块查找子网/ip 是否在更大的子网中?
- php - 如果它们位于同一服务器中,如何将下一个 js 连接为前端,将 codeignitor 连接为后端
- python - Matplotlib xticks 范围和标签问题
- jmeter - 如何使用 JMeter 测试单页应用程序的客户端性能测试
- html - 使用文本文件中的日期作为下拉列表的选项