:ASP.NET MVC 웹 API 및 통과 중 하나로, OData 쿼리
public FindOrganizationsQueryResult Execute(FindOrganizationsQuery request)
{
var organizations = request.ODataQuery.ApplyTo(_mgpQueryContext.Organizations).Cast<Organization>();
return new FindOrganizationsQueryResult(organizations);
}
쿼리 클래스 :
public IQueryable<OrganizationViewModel> Get(ODataQueryOptions<Organization> oDataQuery)
{
var query = new FindOrganizationsQuery(oDataQuery);
var result =_findOrganizationsQueryHandler.Execute(query);
return result.Organizations.Select(o => new OrganizationViewModel { Id = o.PublicId, Name = o.Name });
}
핸들러의 모습 모양은 다음과 같습니다.
public class FindOrganizationsQuery
{
public FindOrganizationsQuery(ODataQueryOptions<Organization> oDataQuery)
{
ODataQuery = oDataQuery;
}
public ODataQueryOptions<Organization> ODataQuery { get; set; }
}
요청과 함께 oData 필터를 전달하면 잘 처리되며이 모든 것이 fin으로 작동합니다. 이자형.
하지만 지금은 대신 가져 오기 작업에 형 ODataQueryOptions을 통과, 나는처럼 FindOrganizationsQuery 클래스를 가지고 싶다 :
public IQueryable<OrganizationViewModel> FindOrganizations(FindOrganizationsQuery query)
{
// query is null
}
그러나 쿼리 매개 변수는 항상 null입니다. ODataQueryOptions 매개 변수가 다른 클래스에 있으면 oData 필터를 전달할 수 있습니까?
'FindOrganizationsQuery' 란 무엇이며 왜 필요합니까? 내부 O'''ODataQueryOptions''FindOrganizations'가'IQueryable '을 반환하는 이유 –
Aron
CQS를 사용하기 때문에, 웹 API 내에서 실행해야하는 응용 프로그램 계층에서 쿼리와 명령이 있습니다. 내 서비스 계층. 실제 조직에서 대신 프로젝션을 사용하여 뷰 모델을 반환합니다. 예를 들어 내비게이션 속성을 공개하지 않기 위해 어떤 속성을 공개할지 결정해야하기 때문입니다. 그러나 이것은 모두 작동합니다. –
좋습니다 ...하지만 왜 다운 스트림은'Organization'에 대한 쿼리를 지정하고'OrganizationViewModel'을 수신해야합니까? 다음과 같은 탐색 속성을 계속 노출하게됩니다. – Aron