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

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

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

< Сильный > Update : Разговаривая с другим программистом, я понимаю, что, вероятно, имеет смысл реализовать нечто подобное между бэкэндом и базой данных и выполнить специальный вызов для этой таблицы. Мне все еще нужно разобраться, если мне нужно создать новый объект для поддержки этого. Я думаю, что все равно будет быстрее, если я просто оставлю тот же объект, но обнулю все соединительные объекты, которые мне не нужны для таблицы. Но, может быть, это считается плохой практикой? Также мы используем 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
azulBonnet 29 Май 2019 в 02:39

2 ответа

Лучший ответ

Возможно, вы ищете анонимного Типы ?

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

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

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

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

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

2
John-Luke Laue 29 Май 2019 в 16:45

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

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

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

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

1
Yeldar Kurmangaliyev 28 Май 2019 в 23:55