2015-12-30 2 views
0

Я пытаюсь добавить некоторую информацию к результату, независимо от того, имеет ли пользователь права на чтение или запись для объекта.Добавить вычисленное значение в результат OData

Давайте предположим, что у меня есть эта сущность:

public class Foo 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Access> AccessRights { get; set; } 
} 

Где AccessRights имеет идентификатор пользователя, и если они имеют доступ чтения/записи.

В настоящее время я просто $expand AccessRights и вычислить, имеет ли пользователь доступ для чтения/записи в интерфейсе. Однако я хотел бы, чтобы это вычисляемое свойство добавлялось к результату.

Пример JSON результат:

{ 
    id: 1, 
    name: "foo", 
    hasReadAccess: true, 
    hasWriteAccess: true 
} 

Можно ли это сделать? Имейте в виду, что HasRead/WriteAccess не существует на модели и не должен.

ответ

0

Вам необходимо разделить вашу модель на две части: модель доступа к данным (что вы получаете на уровне доступа к данным) и модель передачи данных (что вы отправляете в ответ).

Предполагая, что ваш текущий класс Foo в качестве модели доступа к данным, вам просто нужно определить другой класс FooResponse (или какое бы имя вам ни было) следующим образом.

public class FooResponse 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool HasReadAccess { get; set; } 
    public bool HasWriteAccess { get; set; } 
} 

Затем определяют преобразование функцию, которая сопоставляет из Foo экземпляров в FooResponse экземпляров. AutoMapper - хороший инструмент для работы.

+0

Так я обычно это делаю. Но я не вижу, как DTO будут хорошо играть с контроллерами OData. –

+0

Зачем это важно? DTO - это тип объекта, который обрабатывает контроллер. – lencharest

+0

Поскольку контроллер OData напрямую взаимодействует с вашей репутацией. Таким образом, вы можете фильтровать и сортировать по URL-адресу. –

Смежные вопросы