Что-то похожее на "Разреженные наборы полей" в .NET - PullRequest
2 голосов
/ 29 мая 2019

Я пытаюсь найти словарный запас, чтобы описать, что я хочу, и существует ли он.

У меня есть таблица, которая показывает несколько точек данных от крупных объектов. Загрузка всех объектов только для таблицы очень медленная. Есть ли способ передать только несколько свойств, которые мне нужны, без определения нового объекта?

Я нашел что-то под названием Sparse Fieldsets в JSON API , и мне интересно, существует ли что-то подобное для .NET под другим именем.

Обновление: Разговаривая с другим программистом, я понимаю, что, вероятно, имеет смысл реализовать нечто подобное между бэкэндом и базой данных и выполнить специальный вызов для этой таблицы. Мне все еще нужно поработать, если мне нужно создать новый объект для поддержки этого. Я думаю, что все равно было бы быстрее, если бы я просто сохранил тот же объект, но исключил все соединительные объекты, которые мне не нужны для таблицы. Но, может быть, это считается плохой практикой? Также мы используем Entity Framework для того, что он стоит.

Обновление 2: Я только что создал новый запрос без всех .Include() и работает достаточно хорошо для того, что мне нужно:

_dataContext.ApplePie
.Include(f => f.Apples).ThenInclude(f => f.Apple)
        .Include(f => f.Sugars).ThenInclude(f => f.MolecularStructure)
        .Include(f => f.Recipe)

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

Возможно, вы ищете Анонимные типы ?

Например, если у вас был типизированный объект с тремя свойствами, но вы хотели работать только с двумя:

var threePropThing = new ThreePropertyThing { Id = 1, Message = "test", ExtraProperty = "ex" };

var myAnonThing = new { Id = threePropThing.Id, Message = threePropThing.Message };  

Лучшая практика - не передавать этот анонимный объект.Но, если вам действительно нужно, вы можете вернуть его как тип object.

Как правило, при передаче данных в c # вы хотите, чтобы они печатались.

1 голос
/ 29 мая 2019

C # является языком со строгой типизацией, и я бы сказал, что в C # необычно поддерживать сценарии, когда определение объекта (свойства) заранее неизвестно, как в случае параметра «поля» JSON API. Реализация этого подразумевает использование отражения для фильтрации свойств, которое обычно медленное и подвержено ошибкам.

При реализации веб-сервисов C # люди обычно создают одну модель ответа DTO на каждый запрос.

Если ваша таблица имеет фиксированный набор полей, я лично рекомендую создать класс DTO, содержащий только те поля, которые требуются для вашей таблицы, а затем создать метод, который возвращает этот ответ для вашего конкретного запроса. Хотя этот вопрос не соответствует «без определения нового объекта» в вопросе, он проясняет намерение и действительно упрощает поддержку API в будущем.

Возможно, вы захотите использовать библиотеки, такие как AutoMapper, чтобы сэкономить время и избежать дублирования кода при копировании значений из модели данных в DTO, если у вас много таких методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...