In this short blog post I want to show how useful EF DB first approach is when testing. While working with legacy project you might now have endpoints to set all data in DB for test, also validating exact data in DB get easier.

Generate code from the database

Install two Nuget packages in a project that will contain DB files: Microsoft.EntityFrameworkCore.Design and Npgsql.EntityFrameworkCore.PostgreSQL don't forget to rebuild the solution.

Next install dotnet-ef global tool and invoke it with following configuration. Tool has variety of configuration parameters, but for the sake of simplicity we will use only minimal set.

dotnet ef dbcontext scaffold "Server=127.0.0.1;Port=6444;Database=weather;User Id=admin_user;Password=secretPassword123!;" Npgsql.EntityFrameworkCore.PostgreSQL --output-dir Weather --no-onconfiguring --force

At this point we should have all necessary files to change dapper into EF.

Only a few changes are needed, create DataAccess inject database string, and use an entity framework in your project or tests. Source code is always available at GitHub

In memory

Why ? If someone is using EF code first on enterprise, please let me know how it's going.

Summary

I find Entity Framework is really helpful in tests, you can easily add data to DB and validate if tests performed correct changes to DB. When the database changes, you only need to run generate.cmd script to update all code and if there are issues, they are in compile-time, which makes maintenance and updates easy.