#c# #entity-framework-core #repository-pattern
Вопрос:
В эти дни я работаю над проектом, и этот проект зависит от другого проекта, который будет воспроизводить репозиторий, на основе моего проекта репозитория Generic Repository pattern
. В своем проекте репозитория я создал метод, который будет получать все данные из полученной сущности и загружать данные из выбранных сущностей в полученное выражение.
Мой метод:
public List<TEntity> GetAll<TEntity>(params Expression<Func<TEntity, object>>[] expressions) where TEntity : class
{
var result = new List<TEntity>();
foreach (var expression in expressions)
{
result = Context.Set<TEntity>().Include(expression).ToList();
}
return resu<
}
Вопрос:
Как вы заметите в приведенном выше методе, я использовал Include
метод внутри итерации ( Foreach
), поэтому мой вопрос : связано ли использование Include
inside foreach
с проблемой производительности или какой-либо другой проблемой ?
Комментарии:
1. Учитывая, что вы игнорируете все результаты, кроме последнего выражения, у вас есть проблемы с корректностью , которые необходимо решить, прежде чем вы даже рассмотрите проблемы с производительностью. Как только ваш код заработает , вы сможете оценить его производительность. И когда вы зайдете так далеко, измерьте код, чтобы увидеть, есть ли у вас проблемы с производительностью, вместо того, чтобы спрашивать незнакомых людей, достаточно ли хорошо работает ваш код.
2. у вас проблемы с корректностью , не могли бы вы привести мне несколько примеров ?
3. См. Первую половину моего первого предложения. Если вы намерены игнорировать все выражения, кроме одного, примите только одно, а не список, выполните запрос для всех из них, а затем выбросьте все результаты, кроме одного, на пол.
4. В выражениях я отправлю связанные сущности для загрузки данных из основной сущности и всех отправленных связанных сущностей, поэтому иногда я могу отправить одну сущность,
expressions
а иногда мне нужно отправить много. И поэтому извините, если у меня возникло недопонимание по поводу вашего комментария, пожалуйста, не могли бы вы дать мне полный ответ и действительно оценить это для вас
Ответ №1:
Вероятно, вам это нужно:
public List<TEntity> GetAll<TEntity>(params Expression<Func<TEntity, object>>[] expressions) where TEntity : class
{
var query = Context.Set<TEntity>().AsQueryable();
foreach (var expression in expressions)
{
query = query.Include(expression);
}
return query.ToList();
}
Комментарии:
1. В любом случае: ben-morris.com/…