entity-framework - 具有最大子记录属性的实体框架模型
问题描述
我有几个具有父子关系的简单 EF 模型。子项本质上是审计记录。我想使用审计来获取最小日期来确定父级的“创建日期”。
这两个模型直接匹配 SQL 数据库,正如您所期望的那样,除了派生的“CreatedDate”字段,我希望 EF 将其转换为简单的“Max”子查询。
我正在将 EF 存储库模式与工作单元模式一起使用,并试图通过 SQL Server 执行 MAX 查询来使事情变得非常简单。
我曾尝试使用 automapper 在我的服务层中进行映射,但这会为每个父级生成一个 SQL 查询。
有任何想法吗?
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public virtual IEnumerable<Audit> Audits { get; set; }
//Read only create date and problem property
[NotMapped]
public DateTime CreatedDate
{
get
{
return Audits.Max(a => a.AuditDate);
}
}
}
public class Audit
{
public int Id { get; set; }
public int ItemId { get; set; }
public DateTime AuditDate { get; set; }
}
解决方案
我很可能是错的,但我认为 EF 不会支持这一点;要么你提取一个项目的所有审计记录,例如
var item = _context.Items.Include("Audit").FirstOrDefault(i=>i.Id==1)
在这种情况下,该方法将起作用。
或者,您可以创建一个映射到仅包含 Id、Name 和 CreateDate 的新实体(或 QueryType,如果您使用的是 EF Core)的视图。
例如
SELECT Id,Name=CreateDate=Max(CreateDate) from Items group by Id,Name
现在,由于我总是对这类事情使用视图,所以我确实在第一点上得到纠正!
推荐阅读
- excel - 无重复数据
- java - Java - 接口 - 如何在多个活动中一起分配特定接口
- python - Python DataFrame:拆分为列表
- php - .htaccess 更改后 Yii2 找不到 /backend/web
- azure-data-lake - ADX 中用于 ADLS 数据的外部表:无记录
- twitter-bootstrap - Vue Bootstrap 4 导航栏高度和下拉菜单在 Safari 上不起作用
- io - Sublime text 3 MinGW 构建
- html - Outlook 上的 HTML 表格未完全显示
- powershell - 如何将带引号的字符串作为参数传递给PowerShell中的可执行文件?
- django - Django添加新记录错误重复键值违反唯一约束“”Django Id不与数据库同步