Недавно я искал хороший пример шаблона репозитория generi c
Шаблон репозитория generi c обычно считается антипаттерном, именно потому, что он слишком универсальный c , Лично я предпочитаю стиль абстракции уровня данных в виде портов и адаптеров, который позволяет приложению определять необходимые ему методы DAL. Хотя во многих случаях прямой EF работает нормально (это, пожалуй, самый распространенный выбор).
В одном случае используется asyn c await, во втором - нет. Почему?
Есть несколько соображений относительно того, когда elide async
/ await
. Это в основном сводится к обработке исключений. Методы, возвращающие задачи, должны помещать исключения для этих задач, а не вызывать исключения напрямую; это неявный контракт для методов с асинхронными сигнатурами.
Итак, этот код будет (некорректно) генерироваться напрямую, если Context
или Set<T>
throw:
public Task<T> GetById(int id) => Context.Set<T>().FindAsync(id);
Как правило, сохранение async
/ await
является безопасным выбором; их устранение является незначительной оптимизацией производительности, которую следует выполнять только после с учетом ловушек .