将OData $ expand与包含OData聚合动态属性IDictionary的实体一起使用时发生错误

时间:2018-07-18 19:19:42

标签: odata aggregate

当尝试对作为开放类型的实体执行odata $ expand查询时遇到错误。 CaseEntity模型如下所示:

   public class CaseEntity
{

    [Key]
    public long Id { get; set; }

    public byte CaseStatusTypeId { get; set; }

    public long ConsumerId { get; set; }

    public long UserId { get; set; }

    public DateTime DateCreated { get; set; }

    public IDictionary<string, object> DynamicProperties { get; set; }

    public virtual List<CaseReportRequestEntity> CaseReportRequests { get; set; }

    public virtual List<ReportColorOfMoneyHistoryEntity> ReportColorOfMoneyHistories { get; set; }

    public virtual List<ReportCompassHistoryEntity> ReportCompassHistories { get; set; }

    public virtual List<ReportSocialSecurityHistoryV2Entity> ReportSocialSecurityHistoriesV2 { get; set; }

我按照the answer for this question中的建议向实体添加了DynamicProperties属性,以便可以使用OData聚合(基本上是sql中的select)进行别名。当我使用$ apply关键字聚合数据时,它可以完美地工作,例如

cases?$apply=groupby((UserId),aggregate(Id with countdistinct as Total))

,并允许我获取按UserId分组的案例总数。在没有IDictionary的情况下,我要别名的属性必须存在于对象上,从而使查询看起来像以下内容:

// Query example without the IDictionary in the model. Can't alias.
cases?$apply=groupby((UserId),aggregate(Id with countdistinct as Id))

但是,当我现在尝试执行以前曾包含$ expand关键字的查询时,例如:

cases?$expand=CaseReportRequests

我收到以下错误:

 internalexception": {
            "message": "The specified type member 'DynamicProperties' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.",
            "type": "System.NotSupportedException",

我正在使用ODataController并返回IQueryable,因此启用了查询。 实体框架用于将实体映射到数据库中的表。

我该怎么做,以便保留IDictionary属性,以便能够将别名属性用作模型中未包含的名称,同时仍然能够执行基本的odata查询,从而可以使用$ filter,$展开,还是从导航对象中选择$ select?

0 个答案:

没有答案