Subscribe
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.
Generic repositories reuse common CRUD, but pure ones often become an anti-pattern. A hybrid base repository plus specific interfaces keeps reuse without losing entity-focused queries.
Wire up MongoDB.Driver in ASP.NET Core with options binding, a singleton IMongoClient, BSON document mapping and full CRUD for a Product collection.
Unit of Work is a transaction boundary for related changes, not a DbContext wrapper. With EF Core you already have it. With Dapper, you coordinate the connection and transaction yourself.