Subscribe
Query specifications encapsulate Where, Include, OrderBy and paging for EF Core. Not the classic GoF IsSatisfiedBy pattern. Build your own or use Ardalis.Specification.
Repeated GETs for unchanged data waste work. Delta builds ETags from SQL Server change tracking so browsers can get 304 Not Modified without re-running your query.
Shared database state makes integration tests flaky. Respawn resets tables between tests so WebApplicationFactory and Testcontainers stay fast, isolated and reliable.
C# enums are lightweight but limited. Smart enums give you type-safe instances with FromId, FromName and List, plus clean EF Core mapping and JSON serialization.
Primitives hide domain meaning. Value objects model concepts like Money and Address with value equality, immutability and rules built in.
Stopwatch timing clutter adds up fast. MethodTimer.Fody weaves duration logging at compile time with a [Time] attribute, optional custom loggers and parameter values in messages.
Dapper does not wrap writes in an implicit transaction. Learn BeginTransaction, Dapper.Transaction and TransactionScope so related SQL statements commit or roll back together.
Unit tests miss the full request pipeline. Integration tests with WebApplicationFactory, Testcontainers and Respawn verify your ASP.NET Core API against a real PostgreSQL database.