У меня есть это действие:
[EnableQuery]
public IHttpActionResult Get()
{
var ordWeb = orderCtx.ORDER.AsQueryable();
var ordWebDTO =ordWeb.ProjectTo<ORDER>(mapper.ConfigurationProvider);
return Ok(ordWebDTO.toList);
}
Это действие внутри контроллера.
orderWebDTO
является результатом сопоставления некоторых полей из разных таблиц базы данных.
В этом случае Odata
запрос, поступающий с Url, должен быть обработан ПОСЛЕ «обратного» вызова.
, когда я использую Odata
Запрос в URL (например, localhost / Controller?% 24top= 30) EntityFramework загружает все данные из базы данных БЕЗ фильтрации их (в примере: последние 30 записей).
Это очень дорого: у меня более 35 тыс. Записей, и они загружаются все и ПОСЛЕ получения последних 30...
Как решить эту проблему?
ОБНОВЛЕНИЕ 09.13.18
У меня есть такой вид сопоставления с одним значением, вычисленным во время работы над отображением.
var c = new MapperConfiguration(
cfg => cfg.CreateMap<ORDER, ORDER_WEB>()
.ForMember(....)
.ReverseMap()
);
mapper = c.CreateMapper();
В модели ORDER_WEB
у меня есть:
public class ORDER_WEB
{
...
...
public string ValueFromEntityFrameworkModel {get; set;}
public string Set_ORDER
{
get
{
ORDER_TYPE tipo = new ORDER_TYPE();
return tipo.GetData(ValueFromEntityFrameworkModel);
}
set { }
}
без toList()
Не может работать ... По этой причине OData работает на ВСЕХ записях и ПОСЛЕ назначенияотображение значений, включая Set_ORDER
.
Дело в том, что: возможно ли сделать очередь ODatary (с атрибутами / параметрами) с несколькими записями и ПОСЛЕ присвоения значений?
Я надеюсь, что будет ясно ...