Can you use mysql with .net core?

Tutorial built with .NET 6.0

Other versions available:

  • .NET: .NET 5.0
  • Node: Node.js

This post shows goes through the steps to connect a .NET 6 API to MySQL using Entity Framework Core, and automatically create/update the MySQL database from code using EF Core migrations.

We'll start with an example .NET 6 CRUD API from a tutorial I posted recently, it uses the EF Core InMemory db provider by default for testing, we'll update it to connect to a MySQL database and run EF Core migrations to auto generate the database and tables from code. For full details about the .NET CRUD API see .NET 6.0 - CRUD API Example and Tutorial.

Tutorial Contents

  • Tools required for this tutorial
  • Download & Run the example .NET API
  • Update API to use MySQL
  • Create MySQL Database with EF Core Migrations
  • Restart .NET CRUD API

Tools required for this tutorial

To follow the steps in this tutorial you'll need the following:

  • .NET SDK - includes the .NET runtime and command line tools.
  • Visual Studio Code - code editor that runs on Windows, Mac and Linux. If you have a different preferred code editor that's fine too.
  • C# extension for Visual Studio Code - adds support to VS Code for developing .NET applications.
  • MySQL - you'll need access to running MySQL server instance for the API to connect to, it can be remote (e.g. Azure, AWS etc) or on your local machine. The Community Server is available for free from https://dev.mysql.com/downloads/mysql/, ensure it is started so the API can connect to it. Installation instructions are available at https://dev.mysql.com/doc/refman/8.0/en/installing.html.

Download & Run the example .NET API

Follow these steps to download and run the .NET 6 CRUD API on your local machine with the default EF Core InMemory database:

  1. Download or clone the tutorial project code from https://github.com/cornflourblue/dotnet-6-crud-api
  2. Start the api by running dotnet run from the command line in the project root folder (where the WebApi.csproj file is located), you should see the message Now listening on: http://localhost:4000.
  3. You can test the API directly with a tool such as Postman or hook it up with the example Angular or React app available.

Starting in debug mode

You can also start the application in debug mode in VS Code by opening the project root folder in VS Code and pressing F5 or by selecting Debug -> Start Debugging from the top menu, running in debug mode allows you to attach breakpoints to pause execution and step through the application code. For detailed instructions including a short demo video see VS Code + .NET - Debug a .NET Web App in Visual Studio Code.

Update .NET API to use MySQL


Add MySQL database provider from NuGet

Run the following command from the project root folder to install the EF Core database provider for MySQL from NuGet:

dotnet add package Pomelo.EntityFrameworkCore.MySql


Add connection string to app settings

Open the appsettings.json file and add the entry "ConnectionStrings" with a child entry for the MySQL connection string (e.g. "WebApiDatabase"), the connection string should be in the format "server=[DB SERVER URL]; database=[DB NAME]; user=[USERNAME]; password=[PASSWORD]".

When EF Core migrations generates the database, the database value will be the name of the database created in MySQL.

The updated appsettings.json file with the connection string should look something like this:

{
    "ConnectionStrings": {
        "WebApiDatabase": "server=localhost; database=dotnet-5-crud-api; user=testUser; password=testPass123"
    },
    "Logging": {
        "LogLevel": {
            "Default": "Information",
            "Microsoft.AspNetCore": "Warning"
        }
    }
}


Update Data Context to Use MySQL

The DataContext class located at /Helpers/DataContext.cs is used for accessing application data through Entity Framework. It derives from the Entity Framework DbContext class and has a public Users property for accessing and managing user data.

Update the OnConfiguring() method to connect to MySQL instead of an in memory database by replacing options.UseInMemoryDatabase("TestDb"); with options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString));.

The updated DataContext class should look like this:

namespace WebApi.Helpers;

using Microsoft.EntityFrameworkCore;
using WebApi.Entities;

public class DataContext : DbContext
{
    protected readonly IConfiguration Configuration;

    public DataContext(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        // connect to mysql with connection string from app settings
        var connectionString = Configuration.GetConnectionString("WebApiDatabase");
        options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString));
    }

    public DbSet Users { get; set; }
}

Create MySQL Database from code with EF Core Migrations


Install dotnet ef tools

The .NET Entity Framework Core tools (dotnet ef) are used to generate EF Core migrations, to install the EF Core tools globally run dotnet tool install -g dotnet-ef, or to update run dotnet tool update -g dotnet-ef. For more info on EF Core tools see https://docs.microsoft.com/ef/core/cli/dotnet

Add EF Core Design package from NuGet

Run the following command from the project root folder to install the EF Core design package, it provides cross-platform command line tooling support and is used to generate EF Core migrations:

dotnet add package Microsoft.EntityFrameworkCore.Design


Generate EF Core migrations

Generate new EF Core migration files by running the command dotnet ef migrations add InitialCreate from the project root folder (where the WebApi.csproj file is located), these migrations will create the database and tables for the .NET Core API.

Execute EF Core migrations

Run the command dotnet ef database update from the project root folder to execute the EF Core migrations and create the database and tables in MySQL.

Check MySQL and you should now see your database with the tables Users and __EFMigrationsHistory.

Restart .NET 6.0 CRUD API

Stop and restart the API with the command dotnet run from the project root folder, you should see the message Now listening on: http://localhost:4000 and the API should now be connected to MySQL.

Subscribe to my YouTube channel or follow me on Twitter, Facebook or GitHub to be notified when I post new content.

I'm currently attempting to travel around Australia by motorcycle with my wife Tina on a pair of Royal Enfield Himalayans. You can follow our adventures on YouTube, Instagram and Facebook.

Does .NET work with MySQL?

Connector/NET includes full support for: Features provided by MySQL Server, up to and including the MySQL 8.0 release series. MySQL as a document store (NoSQL), along with X Protocol connection support to access MySQL data using X Plugin ports.

How do I connect MySQL database to dotnet core?

How to Connect to MySQL from ..
Install MySqlConnector. First, install the MySqlConnector NuGet package. ... .
Connection String. A typical connection string for MySQL is: Server=YOURSERVER;User ID=YOURUSERID;Password=YOURPASSWORD;Database=YOURDATABASE. ... .
Configure Service (ASP.NET Core) ... .
Open and Use the Connection..

What database should I use with .NET Core?

MS SQL Server is a great choice to get you started working with databases in ASP.NET Core MVC, which is why we will be using it in this tutorial.

Does MySQL work with C#?

MySql. Data is an implementation of the ADO.NET specification for the MySQL database. It is a driver written in C# language and is available for all . NET languages.