具有最大子记录属性的实体框架模型

时间:2019-11-19 22:24:44

标签: entity-framework

我有几个带有父子关系的简单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; }
}

1 个答案:

答案 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

现在,由于我总是将视图用于此类事情,因此我确实要在第一点上进行纠正!

相关问题