Building ASP.NET Core and EF Core multi-tenant apps - цикл из 6 статей по построению multi-tenant приложения. В отличие от множества других статей - здесь рассматриваются несколько разных вариантов, с достоинствами/недостатками и ограничениями, которые присущи каждому способу.
Global Filters in Entity Framework - вторая статья (не имеющая отношения к первой, но имеющая отношение к multi-tenancy) - применение глобальных фильтров в EF для разграничения доступа к данным в контексте EF
#dotnet #ef
Global Filters in Entity Framework - вторая статья (не имеющая отношения к первой, но имеющая отношение к multi-tenancy) - применение глобальных фильтров в EF для разграничения доступа к данным в контексте EF
#dotnet #ef
Use Expression Trees to Build Dynamic Queries - очень часто возникает необходимость фильтровать данные по запросу с фронта по разным полям. Типичный пример - интернет-магазин с фильтрами по полям/критериям/категориям товара. В статье рассматривается вариант использования Expression<T> для построения динамических LINQ-запросов, которые можно маппить из DTO-модели. #dotnet #ef
Исчерпывающий мануал по созданию собственных LINQ-провайдеров для EntityFramework. К сожалению этот проект IQToolkit заброшен судя по всему, но для понимания как внутри устроен EF - неплохо бы просмотреть. Подумываю сделать LINQ-провайдер для одной из СУБД, для которого его ещё нет :)
Ещё одна статья - про динамическое построение Expression - в частности для применения например в фильтрации в запросах.
#dotnet #ef
Ещё одна статья - про динамическое построение Expression - в частности для применения например в фильтрации в запросах.
#dotnet #ef
LongQueryInterceptor.cs (gist) - автоматически логирует в штатный лог запросы EntityFramework, которые выполняются дольше чем указанное время. #dotnet #ef
👍7🔥3
Не забываем тегировать потенциально длительные запросы в EF. Иногда экономит массу времени, особенно если в проекте есть похожие друг на друга сложные запросы. Реверсить SQL код в EF выражение иногда сложнее, чем наоборот. А так оно будет написано в лог прямо с комментарием, который был задан в TagWith. Я обычно туда пишу
nameof(className)
или nameof(className) + '.' + nameof(methodName)
#ef👍12🔥1