Navigation properties make database calls look like property access. The query fires, the change tracker updates records, the cartesian product bloats the result — none of it visible at the call site. This note covers why I use foreign key IDs instead.
Dec 11 2025Data
- Navigation properties make database calls invisible
- Standardize Data at Write Time, Not Read Time
Why I normalize data from multiple sources when saving to the database, not when displaying it. Using IoT temperature monitoring as a practical example.
Oct 18 2025 - Your system is an ETL pipeline
Understanding how most software systems inherently function as ETL pipelines and how to leverage this perspective for better system design.
Apr 23 2025 - Dynamic SQL queries: string concatenation vs SqlKata
A comparison of approaches to building dynamic SQL queries in .NET applications, contrasting string concatenation with SqlKata's query builder for safer and more maintainable code.
Jan 23 2023 - Solving the N+1 query problem
A deep dive into diagnosing and fixing the N+1 query anti-pattern in ORMs, with practical examples of using eager loading and joins to improve database performance.
Jun 10 2018 - .NET Database Development with FluentMigrator (Archive, 2014)
A comprehensive guide on implementing database versioning with FluentMigrator in .NET projects, including automated migrations, version control integration, and cross-database provider support.
Dec 12 2014