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

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Многоразовый запрос на получение с использованием Entity Framework

Сообщение Anonymous »

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

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

PersonRepository:
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
}
);
}
Если в некоторых случаях использования требуются: дополнительный столбец, .Include(), фильтр, тогда мне нужен отдельный метод Get и Dto для каждого из них. те. Эти методы сложно повторно использовать и управлять ими. Я чувствую, что это плохая практика, и мне нужны дженерики или методы многократного использования. Когда я запрашиваю базу данных, я должен иметь возможность легко указать включения, определенные столбцы и фильтры из вызывающей службы.
Вопрос: как вы обрабатываете запросы только к определенным столбцам с ЭФ? Будь то с шаблоном репозитория или без него, вызывая DbContext на уровне сервиса.
Мои предварительные решения и результаты исследований:
  • В разделе «Эффективные запросы» я обнаружил, что мне нужен анонимный тип C#:

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

     return new { column1, column2 }
    
    Проблема: вернуть динамический тип или как изменить методы?

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

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


Подробнее здесь: https://stackoverflow.com/questions/791 ... -framework
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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