【问题标题】:ABPOData + EF Model with custom calculated properties具有自定义计算属性的 ABPOData + EF 模型
【发布时间】:2017-07-25 15:21:44
【问题描述】:

我正在使用 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 零)来实现这一点。请记住,我们需要返回从 EF 调用返回的相同 IQueryable。

【问题讨论】:

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


    【解决方案1】:

    该错误是由于无法将 AddHours 方法转换为 SQL 造成的。

    你有两个选择:

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

    【讨论】:

    • 感谢您的回复。基本上,我想将开始时间和结束时间转换为客户端本地时间(每个客户端时区存储在设置表中)。根据客户,时间会有所变化。所以我不能使用第一个选项。此 API 在 Power BI 中使用,因此第二个选项也不可行。
    猜你喜欢
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 2016-12-23
    • 1970-01-01
    相关资源
    最近更新 更多