当尝试对作为开放类型的实体执行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?