2016-10-18 4 views
0

В моем ODATA web api v4 я пытаюсь разрешить несколько DTO для одного объекта.OData multiple DTO для того же объекта

ODataModelBuilder builder = new ODataConventionModelBuilder(); 
var version = builder.MaxDataServiceVersion; 
builder.EntitySet<PersonModelAdminDTO>("PersonModel").EntityType.HasKey(p => p.RecordId); 
builder.EntitySet<PersonModelBasicDTO>("PersonModel").EntityType.HasKey(p => p.RecordId); 

Я пробовал вышеуказанный код, но он говорит, что объект уже добавлен.

В принципе, поскольку я не хочу раскрывать все свойства PersonModel базовому пользователю, я создал отдельный DTO.

Я не хочу показывать, что PersonModelAdminDTO и PersonModelBasicDTO устанавливаются отдельно для метаданных клиента, потому что это сбивает с толку.

--- Отредактированный ----

В дополнение к предложению я попытался https://github.com/OData/ODataSamples/tree/master/WebApi/v4/DynamicEdmModelCreation

ее немного модифицировал

await SendQuery("/odata/mydatasource/Products?$select=ID", "Query the Products entity set."); 

Там, кажется, существующая ошибка разомкнут:

stackoverflow.com/questions/29308157/

github.com/OData/WebApi/issues/175

ответ

0

Вы можете только действительно добавить одну из этих вещей в метаданных, так что я думаю, что у вас есть два варианта здесь:

  1. Вы можете добавить полный объект и в зависимости от пользователя, заполняют только те свойства, к которым у них есть доступ. Это, вероятно, самая простая вещь, но это означает, что свойства будут в метаданных.

  2. Вы можете создать модель по каждому запросу и проверить, какой тип пользователя он должен определить, какой DTO вы добавляете. Существует пример динамического построения модели here, но она не сосредоточена вокруг разрешений

+0

Второй вариант не поддерживает OData запросов, т.е. $ фильтр, $ выбрать и т.д. – mehwish

+0

@mehwish Это можно сделать, это то, как я настроить мою систему и поддерживает $ filter и $ select. Почему вы думаете, что это не поддержит это? – TomDoesCode

+0

Я редактировал свой вопрос с вашим предложением. Пожалуйста, дайте мне знать, если у вас есть работа над этой проблемой. – mehwish

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

  • Нет связанных вопросов^_^