我有几个带有父子关系的简单EF模型。子级实质上是审核记录。我想使用审核来获取最小日期,以确定父级的“创建日期”。
这两个模型与您期望的SQL数据库直接匹配,只是我希望EF将派生的“ CreatedDate”字段转换为简单的“ Max”子查询。
我正在将EF Repository模式与Unit of Work模式结合使用,并试图使SQL Server执行MAX查询的过程变得非常简单。
我尝试使用自动映射器在服务层中进行映射,但这会为每个父级生成一个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; }
}
答案 0 :(得分:0)
我很可能是错的,但我认为英孚不会支持这一点。您可以拉入某项的所有审核记录 例如
var item = _context.Items.Include("Audit").FirstOrDefault(i=>i.Id==1)
在这种情况下该方法将起作用。
或者,您可以创建一个映射到仅包含ID,名称和CreateDate的新实体(如果使用EF Core,则为QueryType)的视图。
例如
SELECT Id,Name=CreateDate=Max(CreateDate) from Items group by Id,Name
现在,由于我总是将视图用于此类事情,因此我确实要在第一点上进行纠正!