Trong bài viết hướng dẫn này, chúng ta sẽ tìm hiểu cách xây dựng web API từ ASP. NET để xử lý các hoạt động CRUD với cơ sở dữ liệu trong MySQL
Mã nguồn. ASP. NET webAPI
tài nguyên cần thiết
Để làm theo từng bước bài viết này hoặc chạy bản demo đi kèm, cần có các công cụ sau đang hoạt động
- mysql
- NET SDK
- Visual Studio 2019/2022
- Khối lượng công việc phát triển web và ASP. NET cho Visual Studio 2019/2022
Quá trình để làm theo
Trong phần hướng dẫn, chúng ta sẽ có ba phần quan trọng
- Xem lại cơ sở dữ liệu chúng tôi sẽ sử dụng
- Thiết lập quyền truy cập cơ sở dữ liệu từ ASP. NET thông qua Entity Framework
- Đặt trình xử lý và phương thức của chúng cho dịch vụ web
Như một trường hợp nghiên cứu cho hướng dẫn này, dữ liệu người dùng sẽ được xử lý thông qua các hoạt động CRUD [Tạo, Đọc, Cập nhật và Xóa]
1. Cơ sở dữ liệu cho miền ứng dụng
Cơ sở dữ liệu mà chúng ta sẽ sử dụng trong ví dụ này được tạo thành từ một bảng duy nhất được gọi là.
Scaffold-DbContext "server=servername;port=portnumber;user=username;password=pass;database=databasename" MySql.EntityFrameworkCore -OutputDir Entities -f
4, với các thuộc tính. Scaffold-DbContext "server=servername;port=portnumber;user=username;password=pass;database=databasename" MySql.EntityFrameworkCore -OutputDir Entities -f
5, Scaffold-DbContext "server=servername;port=portnumber;user=username;password=pass;database=databasename" MySql.EntityFrameworkCore -OutputDir Entities -f
6, Scaffold-DbContext "server=servername;port=portnumber;user=username;password=pass;database=databasename" MySql.EntityFrameworkCore -OutputDir Entities -f
7, Scaffold-DbContext "server=servername;port=portnumber;user=username;password=pass;database=databasename" MySql.EntityFrameworkCore -OutputDir Entities -f
8, Scaffold-DbContext "server=servername;port=portnumber;user=username;password=pass;database=databasename" MySql.EntityFrameworkCore -OutputDir Entities -f
9, và public partial class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public DateTime EnrollmentDate { get; set; }
}
0; Các câu lệnh SQL để tạo bảng
Scaffold-DbContext "server=servername;port=portnumber;user=username;password=pass;database=databasename" MySql.EntityFrameworkCore -OutputDir Entities -f
4 như sau________số 8_______
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Rất tốt, với cơ sở dữ liệu được thiết lập, chúng tôi đã có thể bắt đầu triển khai dự án đầu tiên của mình để phát triển các dịch vụ API Rest
2. Thiết lập quyền truy cập cơ sở dữ liệu từ ASP. NET thông qua Entity Framework
ASP. dự án API web NET
Trong Visual Studio, điều đầu tiên chúng ta sẽ làm là tạo một dự án mới kiểu ASP. NET Core Web API
Sau đó, trong các bước sau, chúng ta có thể chỉ định Framework
Với dự án này, chúng tôi sẽ tạo quyền truy cập vào cơ sở dữ liệu và triển khai bộ điều khiển tương ứng để làm việc với dữ liệu đó và cung cấp API web
Truy cập cơ sở dữ liệu với Entity Framework
Để thiết lập các thực thể thông qua các lớp và kết nối cơ sở dữ liệu, chúng ta có thể sử dụng cách tiếp cận Cơ sở dữ liệu đầu tiên của Entity Framework, cho phép chúng ta giàn giáo từ cơ sở dữ liệu đến dự án, nghĩa là tự động tạo các lớp theo các thực thể được thiết lập trong
Với mục đích này, cần cài đặt ba gói NuGet
2public partial class User { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Username { get; set; } public string Password { get; set; } public DateTime EnrollmentDate { get; set; } }
3public partial class User { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Username { get; set; } public string Password { get; set; } public DateTime EnrollmentDate { get; set; } }
4public partial class User { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Username { get; set; } public string Password { get; set; } public DateTime EnrollmentDate { get; set; } }
Trong trường hợp bạn đang làm việc với SQL Server, gói NuGet cần cài đặt sẽ là.
public partial class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public DateTime EnrollmentDate { get; set; }
}
5Ghi chú. để tìm trung tâm quản trị của các gói nuGet, chúng ta có thể vào tùy chọn. menu -> dự án -> Quản lý gói NuGet
Với việc cài đặt các gói NuGet này, bây giờ chúng ta sẽ mở bảng điều khiển quản lý gói để viết lệnh cho phép chúng ta thực hiện giàn giáo từ cơ sở dữ liệu
Chỉ huy
Scaffold-DbContext "server=servername;port=portnumber;user=username;password=pass;database=databasename" MySql.EntityFrameworkCore -OutputDir Entities -f
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Kết quả là như sau
Ở đây, lớp
Scaffold-DbContext "server=servername;port=portnumber;user=username;password=pass;database=databasename" MySql.EntityFrameworkCore -OutputDir Entities -f
4 được định nghĩa như saupublic partial class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public DateTime EnrollmentDate { get; set; }
}
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Và
public partial class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public DateTime EnrollmentDate { get; set; }
}
7, có cấu hình với cơ sở dữ liệu, có phương thức chính là public partial class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public DateTime EnrollmentDate { get; set; }
}
8 sẽ giống như thế nàyprotected override void OnConfiguring[DbContextOptionsBuilder optionsBuilder]
{
if [!optionsBuilder.IsConfigured]
{ optionsBuilder.UseMySQL["server=localhost;port=3306;user=root;password=;database=database"];
}
}
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Bây giờ, không phải là điều thích hợp nhất khi chuỗi kết nối tới cơ sở dữ liệu được chỉ định trong phương thức
public partial class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public DateTime EnrollmentDate { get; set; }
}
8. Đối với điều này, trong dự án của chúng tôi, chúng tôi có thể tìm thấy tệp protected override void OnConfiguring[DbContextOptionsBuilder optionsBuilder]
{
if [!optionsBuilder.IsConfigured]
{ optionsBuilder.UseMySQL["server=localhost;port=3306;user=root;password=;database=database"];
}
}
0, trong đó chúng tôi có thể xác định cấu hình này"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "server=servername;port=portnumber;user=username;password=pass;database=databasename;"
}
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Sau đó, trong lớp
protected override void OnConfiguring[DbContextOptionsBuilder optionsBuilder]
{
if [!optionsBuilder.IsConfigured]
{ optionsBuilder.UseMySQL["server=localhost;port=3306;user=root;password=;database=database"];
}
}
1, chúng tôi sẽ thêm dịch vụ vào lớp public partial class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public DateTime EnrollmentDate { get; set; }
}
7, và sau đó chúng tôi phải tham chiếu thuộc tính protected override void OnConfiguring[DbContextOptionsBuilder optionsBuilder]
{
if [!optionsBuilder.IsConfigured]
{ optionsBuilder.UseMySQL["server=localhost;port=3306;user=root;password=;database=database"];
}
}
3 được chỉ định trong tệp protected override void OnConfiguring[DbContextOptionsBuilder optionsBuilder]
{
if [!optionsBuilder.IsConfigured]
{ optionsBuilder.UseMySQL["server=localhost;port=3306;user=root;password=;database=database"];
}
}
0builder.Services.AddEntityFrameworkMySQL[]
.AddDbContext[options =>
{
options.UseMySQL[builder.Configuration.GetConnectionString["DefaultConnection"]];
}];
}];
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Trong trường hợp này, quay lại lớp của
public partial class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public DateTime EnrollmentDate { get; set; }
}
7, chúng ta xóa chuỗi kết nối được chỉ định trong phương thức public partial class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public DateTime EnrollmentDate { get; set; }
}
8. Cuối cùng, chúng ta sẽ có phương thức rỗngprotected override void OnConfiguring[DbContextOptionsBuilder optionsBuilder]
{}
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Với các bước này, chúng ta đã sẵn sàng kết nối và các cấu hình cần thiết để làm việc với cơ sở dữ liệu trong ASP. NET với sự trợ giúp của Entity Framework
3. Đặt bộ điều khiển và phương thức của chúng cho dịch vụ web
Để truyền dữ liệu giữa các quy trình quản lý cơ sở dữ liệu và các quy trình làm việc với các dịch vụ web, nên thiết lập các lớp DTO cho từng thực thể của dự án, trong trường hợp này là một DTO cho thực thể
Scaffold-DbContext "server=servername;port=portnumber;user=username;password=pass;database=databasename" MySql.EntityFrameworkCore -OutputDir Entities -f
4Để làm điều này, chúng ta sẽ tạo một thư mục mới trong dự án có tên là DTO và tạo một lớp có tên là
protected override void OnConfiguring[DbContextOptionsBuilder optionsBuilder]
{
if [!optionsBuilder.IsConfigured]
{ optionsBuilder.UseMySQL["server=localhost;port=3306;user=root;password=;database=database"];
}
}
8, thuộc tính của lớp này sẽ giống với lớp Scaffold-DbContext "server=servername;port=portnumber;user=username;password=pass;database=databasename" MySql.EntityFrameworkCore -OutputDir Entities -f
4 được xác định trong phần "AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "server=servername;port=portnumber;user=username;password=pass;database=databasename;"
}
0 ở trênpublic class UserDTO
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public DateTime EnrollmentDate { get; set; }
}
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Bộ điều khiển cho API Web
Bây giờ, những gì chúng ta sẽ làm là thêm bộ điều khiển, trong trường hợp này là bộ điều khiển cho người dùng, bộ điều khiển này sẽ cho phép thiết lập các phương thức để thực hiện các thao tác CRUD trên các bảng của cơ sở dữ liệu và hiển thị chúng thông qua API Web. Trên thư mục
"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "server=servername;port=portnumber;user=username;password=pass;database=databasename;"
}
1, chúng tôi sẽ thêm bộ điều khiển có tên là "AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "server=servername;port=portnumber;user=username;password=pass;database=databasename;"
}
2Định nghĩa của clase y su constructor se verá así
[ApiController]
[Route["api/[controller]"]]
public class UserController : ControllerBase
{
private readonly DBContext DBContext;
public UserController[ DBContext DBContext]
{
this.DBContext = DBContext;
}
...
}
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Bây giờ, mục tiêu là thực hiện các hoạt động CRUD. Theo nghĩa này, chúng ta sẽ sử dụng các phương thức để truy cập thông tin [Get], để chèn dữ liệu [Post], để sửa đổi [Put] và để xóa bản ghi [Delete]
Sau đây là mã cuối cùng cho mỗi phương pháp
A. Lấy danh sách tất cả người dùng đăng ký
[HttpGet["GetUsers"]]
public async Task Get[]
{
var List = await DBContext.User.Select[
s => new UserDTO
{
Id = s.Id,
FirstName = s.FirstName,
LastName = s.LastName,
Username = s.Username,
Password = s.Password,
EnrollmentDate = s.EnrollmentDate
}
].ToListAsync[];
if [List.Count