📓 Записки программера
1.02K subscribers
304 photos
1 video
6 files
599 links
Канал с регулярными постами о разных интересных материалах (статьи, видео, фреймворки и полезные инструменты).

https://dotnet.social/@denisio
加入频道
Building ASP.NET Core and EF Core multi-tenant apps - цикл из 6 статей по построению multi-tenant приложения. В отличие от множества других статей - здесь рассматриваются несколько разных вариантов, с достоинствами/недостатками и ограничениями, которые присущи каждому способу.

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
LongQueryInterceptor.cs (gist) - автоматически логирует в штатный лог запросы EntityFramework, которые выполняются дольше чем указанное время. #dotnet #ef
👍7🔥3
Не забываем тегировать потенциально длительные запросы в EF. Иногда экономит массу времени, особенно если в проекте есть похожие друг на друга сложные запросы. Реверсить SQL код в EF выражение иногда сложнее, чем наоборот. А так оно будет написано в лог прямо с комментарием, который был задан в TagWith. Я обычно туда пишу nameof(className) или nameof(className) + '.' + nameof(methodName) #ef
👍12🔥1