具有自定义计算属性的ABPOData + EF模型

时间:2017-07-24 12:30:14

标签: c# entity-framework odata aspnetboilerplate asp.net-boilerplate

我正在使用Web API + AbpOData + EF,需要计算从服务器上的数据库返回的对象的一些属性。

基本代码如下所示:

[AbpApiAuthorize(AppPermissions.OData_Permission_Consume)]
public class ActivityLogsController : AbpODataEntityController<ActivityLogs>
{

    [EnableQuery(PageSize = 50000)]
    public override IQueryable<ActivityLogs> Get()
    {
        var objectContext = new MyObjectContext(); //EF

        return objectContext.ActivityLogs.GetAll();
    }
}

我只是从数据库返回值,一切都很好。

但我需要的是将两个日期时间值转换为本地时间。如下所示

[AbpApiAuthorize(AppPermissions.OData_Permission_Consume)]
public class ActivityLogsController : AbpODataEntityController<ActivityLogs>
{

    [EnableQuery(PageSize = 50000)]
    public override IQueryable<ActivityLogs> Get()
    {
        var objectContext = new MyObjectContext(); //EF

        return objectContext.ActivityLogs.Select(d => new ActivityLogs()
        {
            Id = d.ID,
            Activity = d.Activity,
            StartTime = d.StartTime.Value.AddHours(5),
            EndTime = d.EndTime.Value.AddHours(5),
            Duration = d.Duration
        });
    }
}

我低于错误

无法在LINQ to Entities查询中构造实体或复杂类型“ActivityLogs”。

我如何使用abp odata框架(.net zero)来表达这一点。请记住,我们需要返回从EF调用返回的相同IQueryable。

1 个答案:

答案 0 :(得分:0)

该错误是由于无法将AddHours方法转换为SQL而引起的。

您有两个选择:

  • 在DB中创建一个视图,您将保留其他逻辑。
  • 在客户端为DateTime属性添加业务。