Blog
Mert Özen's blog posts on software development, backend, frontend, and DevOps.
Data Annotations or Fluent API in EF Core? OnModelCreating and IEntityTypeConfiguration
We put the two ways of overriding conventions side by side: data annotations and the Fluent API in OnModelCreating. We split configuration with IEntityTypeConfiguration and ApplyConfigurationsFromAssembly, test unique indexes, check constraints and default values against real SQLite errors, and see the precedence order and the bool default trap.
Model and Conventions in EF Core: Keys, Nullability, Column Types and Shadow Properties
We read how EF Core builds its model from real schema output: the key convention, NOT NULL and NULL columns with NRT, SQLite and SQL Server column types, the decimal warning, temporary keys and Guid generation, where table names come from, and the shadow foreign key EF Core adds on its own.
Your First EF Core App: DbContext, DbSet, SQLite and the Generated SQL
We build the first EF Core app from an empty console project: the SQLite and Design packages, dotnet-ef as a local tool, DbContext and DbSet, OnConfiguring, EnsureCreated, the first insert and query, real SQL via LogTo and ToQueryString, and the SQL differences between EF Core 6 and 10.
What Is Entity Framework Core? The ORM Idea and EF Core's Architecture
Starting from plain ADO.NET code we see why ORMs exist: EF Core's DbContext, model, provider and change tracker, the different SQL SQLite and SQL Server generate from the same LINQ, EF6 versus EF Core, a Dapper comparison and how the series is organized.
What's New in .NET 10: AddValidation, OpenAPI 3.1 and Server-Sent Events in ASP.NET Core
.NET 10 LTS brings AddValidation to minimal APIs, OpenAPI 3.1 and YAML, TypedResults.ServerSentEvents, System.Text.Json-based JSON Patch, dotnet run app.cs, C# 14 and breaking changes such as cookie auth 401/403.
What's New in .NET 9: Built-in OpenAPI, Scalar and HybridCache in ASP.NET Core
.NET 9 drops Swashbuckle from the template: AddOpenApi/MapOpenApi, transformers, Scalar and Swagger UI, stampede-safe HybridCache, TypedResults.InternalServerError, StatusCodeSelector, C# 13 and 24-month STS support.
What's New in ASP.NET Core with .NET 8: Keyed DI, IExceptionHandler, Identity API and Native AOT
Keyed DI, IExceptionHandler, MapIdentityApi, ShortCircuit, TimeProvider, Native AOT and the minimal API template in .NET 8, compared with .NET 6, plus C# 12, migration notes and the November 10, 2026 end of support.
What's New in ASP.NET Core with .NET 7: MapGroup, TypedResults, Rate Limiting and Output Caching
MapGroup, TypedResults and Results<T1,T2>, endpoint filters, AddProblemDetails, rate limiting and output caching in .NET 7, compared with .NET 6, plus C# 11 required members, raw string literals and migration notes.
Reading Old .NET Core 3.1 and .NET 5 Projects: Migrating from Startup.cs to .NET 6
We read the Startup.cs, Generic Host and UseRouting/UseEndpoints structure of the .NET Core 3.1 and .NET 5 era, then move the same ASP.NET Core API to .NET 6 step by step, including System.Text.Json differences.
Containerizing an ASP.NET Core Web API with Docker and Setting Up CI/CD with GitHub Actions
We containerize an ASP.NET Core Web API with a multi-stage Dockerfile: dotnet publish, the layer cache, .dockerignore, ports and environment settings; then we build a GitHub Actions CI/CD pipeline that tests the code and pushes the image to ghcr.io.
Integration Testing an ASP.NET Core Web API: End-to-End Tests with WebApplicationFactory
We spin up an ASP.NET Core Web API in memory with WebApplicationFactory and test it at the HTTP level: public partial class Program, swapping the database for in-memory SQLite, Location and ProblemDetails tests, and test isolation.
Unit Testing an ASP.NET Core Web API: Service and Controller Tests with xUnit and Moq
Unit testing an ASP.NET Core Web API with xUnit and Moq: the right package versions for net6.0, AAA and naming, Setup and Verify, the Result/Value difference in ActionResult<T> tests, Theory, and a comparison with NSubstitute.