Giới thiệu

Trong bài hướng dẫn này tôi sẽ hướng dẫn các bạn cách đơn giản nhất để có thể cấu hình một project sử dụng .Net Core 3.1 có thể làm việc với MariaDB kết hợp với Entity Framework Core. Trước khi bắt đầu bài hướng dẫn tôi xin giới thiệu qua về các công nghệ được sử dụng trong bài này:

  • .Net Core: là một nền tảng mã nguồn mở được xây dựng cho việc lập trình. Nó giúp chúng ta có thể lập trình các ứng dụng Web hoặc API trên các ngôn ngữ lập trình của .NET như C#, VB.
  • MariaDB: cũng là một Hệ quản trị cơ sở dữ liệu (RDMS) mã nguồn mởhoàn toàn miễn phí được phát triển dựa trên Hệ quản trị CSDL MySQL trước đây (Hiện nay đã tính phí).
  • Entity Framework: là một nền tảng  Object-Relational Mapping (QRM) mã nguồn mở sử dụng cho các ứng dụng được phát triển trên nền tảng .NET. Nó giúp chúng ta có thể làm việc với database sử dụng thông qua các đối tượng .NET. Do vậy chúng ta có thể thực hiện các yêu cầu tương tác với dữ liệu thông qua các đối tượng .NET. Nó rất tiện dùng và tiết kiệm rất rất nhiều thời gian lập trình cho chúng ta.
  • Entity Framework Core: đây là một phiên bản mới của Entity Framework có từ sau phiên bản EF 6.x. Nó là một framework đa nền tảng (cross-platform), không giống như Entity Framework – chỉ sử dụng trên nền tảng .NET.

Tạo Project .Net Core API

Chọn ASP.NET Core Web Application trong màn hình tạo Project trên Visual Studio
Chọn API tại màn hình chọn Template cho ứng dụng

Tạo Database (MariaDB)

Trong bài viết này tôi đã chuẩn bị sẵn 1 Server Ubuntu đã cài đặt sẵn MariaDB và thực hiện thiết lập các quyền truy cập cho phép có thể remote connection. Bây giờ tôi sẽ tạo một Database mới bằng đoạn mã sau:

CREATE DATABASE EmployeeDB;
USE EmployeeDB;
CREATE TABLE `Employee`  (
  `EmployeeID` char(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'Khóa chính',
  `EmployeeCode` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'Mã hồ sơ',
  `FirstName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'Họ',
  `LastName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'Tên',
  `FullName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'Họ và tên',
  `DateOfBirth` date NOT NULL COMMENT 'Ngày sinh',
	PRIMARY KEY (`EmployeeID`) USING BTREE,
  UNIQUE INDEX `IX_EmployeeID`(`EmployeeID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'hồ sơ nhân viên' ROW_FORMAT = Dynamic;

Sau khi đã tạo xong Database ta tiến hành thêm dữ liệu vào bảng.

Cài đặt các gói NuGet cần thiết

Để thực hiện cài đặt các gói cần thiết trên NuGet chúng ta sử dụng .NET CLI core – một công cụ sử dụng đa nền tảng. Trên Visual Studio thì ta có thể mở cửa sổ Package Manager Console như dưới đây:

Chọn Pakage Manage Console

Bước tiếp theo chúng ta cần chuyển tới thư mục chứa project vừa tạo và chắc chắn thư mục đó chứa file .csproj của project.

Tiếp theo chúng ta cần cài đặt “dotnet ef” để cho phép có thể truy cập tới Entity Framework tools bằng CLI .NET

 dotnet tool install --global dotnet-ef 

Kiểm tra cài đặt “dotnet ef” thành công bằng cách mở cmd trên window và gõ “dotnet ef” sẽ hiển thị ra kết quả như sau:

Đối với Entity Framework Core chúng ta có thể làm việc trên nhiều loại cơ sở dữ liệu như SQL Server, Postegre SQL, MariaDB, MySql… Tuy nhiên để làm được việc này thì chúng ta cần plug-in library “database provider”. Đối với MariaDB/MySQL chúng ta sẽ sử dụng “Pomelo.EntityFrameworkCore.MySql“.
Chúng ta cần cài đặt 2 gói NuGet cần thiết bằng lệnh sau:

dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Pomelo.EntityFrameworkCore.MySql

Dựng (scaffolding ) model và tạo database context

Để dựng ra các Model và tạo một context (xem thêm thông tin về DbContext EFCore), chúng ta cần thực thi tiếp đoạn mã sau:

dotnet ef dbcontext scaffold "server=localhost;port=3306;user=<username>;password=<password>;database=<database>" Pomelo.EntityFrameworkCore.MySql -c EmployeedbContext -o Models 

Chú ý: Bạn cần thay đổi thông tin username, password và database trên đoạn mã tương ứng với các thông tin để kết nối tới database của bạn. Bạn cũng có thể thay đổi tên context (EmployeedbContext)

Kết quả ta sẽ thấy trên Project sẽ tự động tạo ra các class như sau:

Các file .cs và package được cài đặt thành công trên Project

Update Startup.cs file

Tôi sẽ sử dụng Dependency Injection (DI) bằng cách thêm dbcontext của mình vào phương thức “ConfigureService” trong lớp Startup.cs. DI cho phép chúng ta tạo ra các phụ thuộc giữa các đối tượng khác nhau một cách linh hoạt dựa trên các mô tả. Bạn có thể xem thêm về DI tại Dependency Injection .NET.

services.AddDbContext<EmployeedbContext >(options => options      
                .UseMySql("Server=localhost; Database=EmployeeDB;User=<username>;Password=<password>;",      
                    mysqlOptions =>      
                        mysqlOptions.ServerVersion(new ServerVersion(new Version(10, 4, 6), ServerType.MariaDb))));      

Chú ý: Bạn cần thay đổi thông tin username, password và database trên đoạn mã tương ứng với các thông tin để kết nối tới database của bạn.

Kiểm tra kết quả

Để kiểm tra kết quả, chúng ta sẽ dựng một controller cho model Employee:

Trong Project: Chuột phải vào thư mục Controller > Add > Controller
Chọn API Controller with actions, using Entity Framework
Chọn model Data context tương ứng và nhấn Add
Kết quả

Chạy chương trình hoặc sử dụng Postman với url https://localhost:/api/employees. ta có kết quả sau:

Kết quả trả về khi gọi tới API qua Postman

Vậy là chúng ta đã hoàn thành việc Xây dựng và cấu hình Project .Net Core 3.1 với MariaDB và Entity Framework Core. Nếu có bất cứ câu hỏi nào các bạn vui lòng comment phía dưới bài viết này.

Tài liệu tham khảo

  • https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet
  • https://docs.microsoft.com/en-us/ef/core/get-started/install/
  • https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql
  • https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext#using-dbcontext-with-dependency-injection