Многоразовый запрос на получение с использованием EntityFrameworkC#

Место общения программистов C#
Anonymous
Многоразовый запрос на получение с использованием EntityFramework

Сообщение Anonymous »

У вас есть одна таблица Person с 50 столбцами. Иногда вы хотите запросить 2 поля, иногда 10 полей и т. д. Затем вы используете выбор Entity Framework, чтобы получить из БД только необходимые столбцы для улучшения запроса.
PersonRepository.cs

Код: Выделить всё

public PersonDto1 GetForSmallValidation()
{
return context.Persons.Select(x =>
new PersonDto1
{
Id = x.Id,
LastName = x.LastName,
}
);
}

public PersonDto2 GetActive()
{
return context.Persons
.Filter(x => x.Active)
.Select(x =>
new PersonDto2
{
Id = x.Id,
LastName = x.LastName,
FirstName = x.FirstName,
... // all fields
}
);
}
Если в некоторых случаях использования требуются: дополнительный столбец, включение, фильтр, тогда мне нужен отдельный метод Get и Dto для каждого из них. Эти методы сложно повторно использовать и управлять ими. Я чувствую, что это плохая практика, и мне нужны дженерики или методы многократного использования. Когда я запрашиваю базу данных, я должен иметь возможность легко указать включения, определенные столбцы и фильтры из вызывающей службы.
Вопрос:
Как вы обрабатываете запросы только определенных столбцов с помощью EF? Будь то с шаблоном репозитория или без него, вызывая dbcontext на уровне сервиса.
Мои предварительные решения и результаты исследований:
  • В разделе «Эффективные запросы» я обнаружил, что мне нужен анонимный тип C#: return new { field1, field2 .

    Проблема: вернуть динамический тип или как изменить методы? public Dynamic GetForSmallValidation() {..
  • Я нашел в шаблоне репозитория общий метод Get, который поможет мне писать только один Get.

    Проблема: как это интегрируется с моими несколькими Dtos (или анонимным типом C#)? Этот метод Get будет иметь общий объект базы данных Person, а методы возвращают PersonDto или анонимный тип.
  • Один Dto с обнуляемым значением для каждого поля даже не рассматривается. Я не могу проверить HasValue для каждого поля.


Подробнее здесь: https://stackoverflow.com/questions/791 ... yframework

Вернуться в «C#»