У меня есть бэкэнд WebAPI, который предоставляет информацию инвентаризации и т. Д. Различным клиентам, используя ODATA v3 (я не могу использовать v4 из-за ограничения в используемом нами компоненте). База данных инвентаря довольно большая (100K + записи), а ODATA отлично подходит для фильтрации на стороне сервера, разбиения на страницы и т. Д. И сохранения передачи данных.Как получить ODATA для сериализации свойства NotMapped
Записи инвентаризации имеют некоторые свойства, которые не отображаются, а скорее вычисляются и заполняются «на лету», поскольку запросы выполняются. Например:
[NotMapped]
public decimal RebateAmount { get; set; }
Проблема заключается в том, что OData игнорирует любые свойства NotMapped, поэтому они никогда не отправляют обратно клиентам.
Я знаю, что это было предложено раньше, но это было некоторое время назад, теперь так я надеялся, что поддержка этого была добавлена к настоящему времени, или что кто-то имеет простой обходной путь (короткий, чтобы позволить EF создать эти поля в БД).
Я попробовал этот уродливый обходной путь, но он не работает (RebateAmount еще не получает включено OData):
private decimal _rebateAmount;
public decimal RebateAmount { get {return _rebateAmount; } }
public void SetRebateAmount(decimal amount)
{
_rebateAmount = amount;
}
Есть ли (желательно простой) способ включать в себя свойство без БД в Наборы результатов ODATA?
Редактировать 1/7/2017 Для этого, чтобы быть полезным в моем сценарии, OData должен также включать вычисляемые поля в его метаданных, в противном случае автоматически генерируемые (на стороне клиента) прокси-классы не будут включать их.
Я начал реализовывать ваше предложение, но оказалось, что он добавляет немного сложности (больше, чем мне удобно для этого); если есть не менее интрузивный способ выполнить это, я просто укушу пулю и поместил бы свойства в БД. Но спасибо за ваше предложение! – Lars335
Я забыл упомянуть, что я использую ODATA 3 (я обновил вопрос), поэтому это объясняет хотя бы одну проблему, которую я испытывал при попытке реализовать ваше предложение. В любом случае, я поддержал вас за то, что нашел время, чтобы предложить возможное решение. – Lars335
Мне пришлось реализовать такой случай раньше, и, к сожалению, я не смог найти более простого решения для этого и создал пользовательский IQueryable с помощью OdataQueryOptions для работы с пользовательским EdmModel. Я бы ответил на этот вопрос, чтобы узнать о лучших решениях. – Ankit