序列包含一個以上的元件在 System.Linq.Enumerable.SingleOrDefault [TSource](IEnumerable`1源)在 System.Web.Http.OData.Builder .ODataConventionModelBuilder.RemoveBaseTypeProperties(EntityTypeConfiguration derivedEntity,EntityTypeConfiguration baseEntity) 在System.Web.Http.OData.Builder.ODataConventionModelBuilder.DiscoverInheritanceRelationships()...OData的「序列包含一個以上的元素」錯誤
這裏是我的綁定代碼:
var modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<PeopleDto>("People");
這裏是我的控制器代碼:
[Queryable]
public IEnumerable<PeopleDto> Get(
[FromUri] Credentials credentials,
ODataQueryOptions<PeopleDto> options,
int departmentId,
DetailLevel detail = DetailLevel.Low)
{
var count = _repository.Filter(x => x.DepartmentId == departmentId && x.Active);
options.ApplyTo(count);
int total = count.Count();
switch (detail)
{
case DetailLevel.Low:
return new Paginable<PeopleDto>(GetMyPeopleLo(departmentId, options), total);
// [...]
}
}
Paginable<T>
實現IEnumerable<T>
。而GetMyPeopleLo()
(不是真實名稱)方法將這些選項應用於其他查詢。 (我不再需要額外的查詢了,因爲我已經移動了分頁代碼的位置,但是我還沒有重構那個部分)。
這是oData的預發佈版本存在問題的情況之一嗎?
更新:如果我註釋掉Queryable
屬性,它似乎工作,但是當選項被應用到count
查詢不實際應用,我在查詢字符串指定任何過濾器。
這聽起來像是與您的DTO相關的問題。 – SLaks
@SLaks DTO是一個非常苗條的類,其成員都是簡單類型,整數,布爾和字符串。 – devlord
如果我註釋掉'Queryable'屬性,它似乎可以工作,但是在查詢字符串中指定的任何過濾器實際上並不適用於將選項應用於'count'查詢時。 – devlord