Làm cách nào để kết nối API Web với cơ sở dữ liệu MySQL?

Tôi đang sử dụng API web cho một dự án mà tôi đang thực hiện, vấn đề là khi tôi cố gắng kết nối với ứng dụng MySQL In, tôi gặp phải lỗi này

Một hoặc nhiều lỗi xảy ra. (Một nỗ lực đã được thực hiện để truy cập vào một ổ cắm theo cách bị cấm bởi quyền truy cập của nó. )

Tôi đã nhận được chuỗi kết nối từ MYSQLCONNSTR_localdb. tập tin ini

Nó trông như thế này. Cơ sở dữ liệu=localdb;Nguồn dữ liệu=127. 0. 0. 1;Id người dùng=azure;Mật khẩu=mật khẩu

Tôi đang sử dụng MySql. Gói data kết nối

Tôi khá mới với Azure, đây chỉ là điều tôi cần làm cho dự án của mình. Tôi hy vọng tôi có thể nhận được một số giúp đỡ. Cảm ơn trước

Trong bài viết này, tôi sẽ hướng dẫn từng bước cách sử dụng đúng Entity Framework Core trong ASP của bạn. NET Core với Cơ sở dữ liệu MySql và

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace CRUDWebAPIWithMySQL.Models
{
    public class StudentDetailContext : DbContext
    {
        public StudentDetailContext(DbContextOptions<StudentDetailContext> options) : base(options)
        {

        }
        public DbSet<StudentDetail> StudentDetails { get; set; }
        //Table Name StudentDetails
    }
}
0 truyền thống. Tất cả các hành động đã được thực hiện trong Visual Studio 2019 trên máy Windows 10 với máy chủ MySql đã cài đặt. Trong ví dụ sử dụng ASP. NET Core Web API dự án (. NET lõi v3. 1)

Trước hết bạn phải biết một số câu hỏi cơ bản. Tôi đã thảo luận về chúng dưới đây

ASP là gì. NET lõi?

ASP. NET Core là một framework mã nguồn mở, đa nền tảng, hiệu suất cao để xây dựng các ứng dụng kết nối Internet, dựa trên đám mây hiện đại. Với ASP. NET Core, bạn có thể. Xây dựng các ứng dụng và dịch vụ web, ứng dụng IoT và phụ trợ di động. Sử dụng các công cụ phát triển yêu thích của bạn trên Windows, macOS và Linux

API Web là gì?

API Web là giao diện lập trình ứng dụng cho máy chủ web hoặc trình duyệt web. Đó là một khái niệm phát triển web, thường được giới hạn ở phía máy khách của ứng dụng web (bao gồm mọi khung web đang được sử dụng) và do đó thường không bao gồm các chi tiết triển khai trình duyệt hoặc máy chủ web như SAPI hoặc API trừ khi ứng dụng web từ xa có thể truy cập công khai

Khung thực thể là gì?

Entity Framework là một Trình ánh xạ quan hệ đối tượng (ORM), là một loại công cụ giúp đơn giản hóa ánh xạ giữa các đối tượng trong phần mềm của bạn tới các bảng và cột của cơ sở dữ liệu quan hệ

ORM là gì?

Ánh xạ quan hệ đối tượng trong khoa học máy tính là một kỹ thuật lập trình để chuyển đổi dữ liệu giữa các hệ thống loại không tương thích bằng ngôn ngữ lập trình hướng đối tượng. Trên thực tế, điều này tạo ra một "cơ sở dữ liệu đối tượng ảo" có thể được sử dụng từ bên trong ngôn ngữ lập trình

MySQL là gì?

MySQL là một cơ sở dữ liệu quan hệ mã nguồn mở. MySQL là nền tảng chéo có nghĩa là nó chạy trên một số nền tảng khác nhau như Windows, Linux và Mac OS, v.v.

Lõi EF trong ASP. NET Core Web API với Cơ sở dữ liệu MySql

Hướng dẫn này giải thích cách thiết lập ASP sẵn sàng sản xuất. NET Core Web API sử dụng Entity Framework với Cơ sở dữ liệu MySQL. API Web của chúng tôi có thể thực hiện các hoạt động CRUD cơ bản

Trong bài viết này, bạn sẽ học cách

  • Tạo một ASP đơn giản. NET Core Web API thực hiện các Hoạt động CRUD bằng Entity Framework (với My SQL Server)
  • using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace CRUDWebAPIWithMySQL.Models
    {
        public class StudentDetailContext : DbContext
        {
            public StudentDetailContext(DbContextOptions<StudentDetailContext> options) : base(options)
            {
    
            }
            public DbSet<StudentDetail> StudentDetails { get; set; }
            //Table Name StudentDetails
        }
    }
    
    0 với Mysql
  • Chạy và tương tác với nó

công cụ bắt buộc

  • ASP. NET lõi
  • Studio trực quan 2019
  • Bàn làm việc MySQL
  • Người phát thơ

Bước 1. Cài đặt MySQL

Làm theo các bước để cài đặt MySQL trong windows 10 của bạn

Tải xuống MySQL

Tải xuống Trình cài đặt MySQL chung có sẵn tại liên kết này. MySQL Workbench có thể được cài đặt bằng gói Windows MSI Installer. Gói MSI mang tên

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace CRUDWebAPIWithMySQL.Models
{
    public class StudentDetailContext : DbContext
    {
        public StudentDetailContext(DbContextOptions<StudentDetailContext> options) : base(options)
        {

        }
        public DbSet<StudentDetail> StudentDetails { get; set; }
        //Table Name StudentDetails
    }
}
2, trong đó phiên bản cho biết số phiên bản MySQL Workbench và cung cấp kiến ​​trúc bản dựng (winx64)

Ứng dụng MySQL Installer có thể cài đặt, nâng cấp và quản lý hầu hết các sản phẩm MySQL, bao gồm cả MySQL Workbench

Thiết lập My SQL bao gồm MySQL Workbench

  • Chạy tệp
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace CRUDWebAPIWithMySQL.Models
    {
        public class StudentDetailContext : DbContext
        {
            public StudentDetailContext(DbContextOptions<StudentDetailContext> options) : base(options)
            {
    
            }
            public DbSet<StudentDetail> StudentDetails { get; set; }
            //Table Name StudentDetails
        }
    }
    
    3
  • Chọn
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace CRUDWebAPIWithMySQL.Models
    {
        public class StudentDetailContext : DbContext
        {
            public StudentDetailContext(DbContextOptions<StudentDetailContext> options) : base(options)
            {
    
            }
            public DbSet<StudentDetail> StudentDetails { get; set; }
            //Table Name StudentDetails
        }
    }
    
    4 hoặc
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace CRUDWebAPIWithMySQL.Models
    {
        public class StudentDetailContext : DbContext
        {
            public StudentDetailContext(DbContextOptions<StudentDetailContext> options) : base(options)
            {
    
            }
            public DbSet<StudentDetail> StudentDetails { get; set; }
            //Table Name StudentDetails
        }
    }
    
    5

  • Sau đó Chọn
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace CRUDWebAPIWithMySQL.Models
    {
        public class StudentDetailContext : DbContext
        {
            public StudentDetailContext(DbContextOptions<StudentDetailContext> options) : base(options)
            {
    
            }
            public DbSet<StudentDetail> StudentDetails { get; set; }
            //Table Name StudentDetails
        }
    }
    
    6 và nhấp vào
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace CRUDWebAPIWithMySQL.Models
    {
        public class StudentDetailContext : DbContext
        {
            public StudentDetailContext(DbContextOptions<StudentDetailContext> options) : base(options)
            {
    
            }
            public DbSet<StudentDetail> StudentDetails { get; set; }
            //Table Name StudentDetails
        }
    }
    
    7

  • Sau đó nhấp vào
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace CRUDWebAPIWithMySQL.Models
    {
        public class StudentDetailContext : DbContext
        {
            public StudentDetailContext(DbContextOptions<StudentDetailContext> options) : base(options)
            {
    
            }
            public DbSet<StudentDetail> StudentDetails { get; set; }
            //Table Name StudentDetails
        }
    }
    
    8 sau khi tải xuống tất cả rồi chọn
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace CRUDWebAPIWithMySQL.Models
    {
        public class StudentDetailContext : DbContext
        {
            public StudentDetailContext(DbContextOptions<StudentDetailContext> options) : base(options)
            {
    
            }
            public DbSet<StudentDetail> StudentDetails { get; set; }
            //Table Name StudentDetails
        }
    }
    
    6-->
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace CRUDWebAPIWithMySQL.Models
    {
        public class StudentDetailContext : DbContext
        {
            public StudentDetailContext(DbContextOptions<StudentDetailContext> options) : base(options)
            {
    
            }
            public DbSet<StudentDetail> StudentDetails { get; set; }
            //Table Name StudentDetails
        }
    }
    
    6

  • Định cấu hình
    "ConnectionStrings": {
        "DBConn": "Server=;port=3306;Database=studentdb;User Id=root;Password=1234;"
    }
    1 thành
    "ConnectionStrings": {
        "DBConn": "Server=;port=3306;Database=studentdb;User Id=root;Password=1234;"
    }
    2, cấu hình tiếp theo hiển thị bên dưới

  • Định cấu hình
    "ConnectionStrings": {
        "DBConn": "Server=;port=3306;Database=studentdb;User Id=root;Password=1234;"
    }
    3. Tại đây, đặt mật khẩu của bạn cho người dùng
    "ConnectionStrings": {
        "DBConn": "Server=;port=3306;Database=studentdb;User Id=root;Password=1234;"
    }
    4
  • Định cấu hình
    "ConnectionStrings": {
        "DBConn": "Server=;port=3306;Database=studentdb;User Id=root;Password=1234;"
    }
    5, giữ nguyên như mặc định

Tiếp theo-->

  • Sau đó nhấp vào
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace CRUDWebAPIWithMySQL.Models
    {
        public class StudentDetailContext : DbContext
        {
            public StudentDetailContext(DbContextOptions<StudentDetailContext> options) : base(options)
            {
    
            }
            public DbSet<StudentDetail> StudentDetails { get; set; }
            //Table Name StudentDetails
        }
    }
    
    8 --->
    "ConnectionStrings": {
        "DBConn": "Server=;port=3306;Database=studentdb;User Id=root;Password=1234;"
    }
    7

  • Sau đó bắt đầu
    "ConnectionStrings": {
        "DBConn": "Server=;port=3306;Database=studentdb;User Id=root;Password=1234;"
    }
    8

bạn được thiết lập

Bước 2. Tạo cơ sở dữ liệu bằng MySQL Workbench

Bạn có thể sử dụng MySQL Workbench GUI để tạo cơ sở dữ liệu. Bạn cũng có thể tạo cơ sở dữ liệu theo chương trình nhưng đây là cách thực hiện thông qua GUI

Trong ví dụ sau, chúng tôi tạo một cơ sở dữ liệu mới có tên "StudentDB"

  • Nhấp vào kết nối của bạn và đăng nhập tài khoản của bạn bằng mật khẩu

  • Nhấp vào biểu tượng để tạo lược đồ mới (bạn sẽ tìm thấy biểu tượng này trên thanh công cụ Workbench)

  • Nhập tên lược đồ (trong trường hợp này là StudentDB) và đối chiếu mặc định, sau đó nhấp vào nút Áp dụng

  • Bạn được nhắc xem lại câu lệnh SQL sẽ được chạy để tạo cơ sở dữ liệu. Để chạy câu lệnh (và tạo cơ sở dữ liệu), bấm Áp dụng

  • Bạn sẽ thấy màn hình sau khi cơ sở dữ liệu đã được tạo

  • Cơ sở dữ liệu hiện đã được tạo. Bây giờ bạn sẽ thấy cơ sở dữ liệu mới của mình được liệt kê trong tab
    "ConnectionStrings": {
        "DBConn": "Server=;port=3306;Database=studentdb;User Id=root;Password=1234;"
    }
    9 ở khung bên trái

Bước 3. Tạo một ASP. NET Core Web API

  • Từ menu Tệp, chọn Mới > Dự án

  • Chọn ASP. NET Core Web Application và nhấp vào Tiếp theo
  • Đặt tên cho dự án là
    "ConnectionStrings": {
        "DBConn": "Server=localhost;port=3306;Database=studentdb;User Id=root;Password=1234;"
    }
    0 và nhấp vào Tạo

  • Trong phần Tạo một ASP mới. NET Core Web Application, xác nhận rằng. NET lõi và ASP. NET lõi 3. 1 được chọn. Chọn mẫu API và nhấp vào Tạo

N. B. Bỏ chọn cấu hình cho Https Nhấn

"ConnectionStrings": {
    "DBConn": "Server=localhost;port=3306;Database=studentdb;User Id=root;Password=1234;"
}
1 để chạy ứng dụng

Bước 4. Thêm phụ thuộc vào ASP. NET lõi

Trước khi chúng tôi bắt đầu dự án của chúng tôi cần một vài phụ thuộc. Chúng tôi sẽ thêm tất cả chúng bằng Trình quản lý gói NuGet

Danh sách các gói dưới đây

  • Microsoft. Thực thểKhungLõi
  • bưởi. Thực thểKhungLõi. MySql
  • Microsoft. Thực thểKhungLõi. Công cụ
  • Microsoft. Thực thểKhungLõi. Thiết kế

Tôi sử dụng nhà cung cấp Polemo thay vì nhà cung cấp Oracle (MySql. Dữ liệu. EntityFrameworkCore) vì trình kết nối của Oracle không hỗ trợ di chuyển EF, nên các mối quan hệ ở đó chỉ có thể được triển khai trong Fluent. API. Công cụ EF tôi đã cài đặt chỉ để đơn giản hóa việc nhập lệnh trong Bảng điều khiển quản lý gói (Bước cuối cùng của câu chuyện này)

Bước 5. Thêm mô hình và bối cảnh cơ sở dữ liệu

Để bắt đầu, chúng tôi cần các Mô hình EF và DbContext cơ bản. Trong ví dụ này, tôi sẽ tạo các mô hình đơn giản với người dùng và thú cưng của anh ấy. Ví dụ này cũng sẽ minh họa việc tự động tạo các mối quan hệ bằng Entity Framework. Đầu tiên tạo một thư mục có tên

"ConnectionStrings": {
    "DBConn": "Server=localhost;port=3306;Database=studentdb;User Id=root;Password=1234;"
}
2, sau đó tạo

"ConnectionStrings": {
    "DBConn": "Server=localhost;port=3306;Database=studentdb;User Id=root;Password=1234;"
}
3 Lớp người mẫu

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace CRUDWebAPIWithMySQL.Models
{
    public class StudentDetail
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ID { get; set; }

        [Required]
        [Column(TypeName = "nvarchar(100)")]
        public string Name { get; set; }

        [Required]
        [Column(TypeName = "varchar(11)")]
        public string Phone_Number { get; set; }

        [Required]
        [Column(TypeName = "varchar(10)")]
        public string Birth_Date { get; set; }
    }
}

Sau đó, tạo tệp DBContext có tên

"ConnectionStrings": {
    "DBConn": "Server=localhost;port=3306;Database=studentdb;User Id=root;Password=1234;"
}
4

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace CRUDWebAPIWithMySQL.Models
{
    public class StudentDetailContext : DbContext
    {
        public StudentDetailContext(DbContextOptions<StudentDetailContext> options) : base(options)
        {

        }
        public DbSet<StudentDetail> StudentDetails { get; set; }
        //Table Name StudentDetails
    }
}

Bước 6. Định cấu hình tiêm phụ thuộc

Trong ví dụ này, tôi sẽ lưu chuỗi kết nối của chúng ta trong tệp

"ConnectionStrings": {
    "DBConn": "Server=localhost;port=3306;Database=studentdb;User Id=root;Password=1234;"
}
5, vì nó hữu ích khi làm việc với Git và các biện pháp Bảo mật

"ConnectionStrings": {
    "DBConn": "Server=;port=3306;Database=studentdb;User Id=root;Password=1234;"
}

Đây là của chúng tôi. Chúng tôi nhận được IP Máy chủ mySQL và số cổng từ

"ConnectionStrings": {
    "DBConn": "Server=localhost;port=3306;Database=studentdb;User Id=root;Password=1234;"
}
6

"ConnectionStrings": {
    "DBConn": "Server=localhost;port=3306;Database=studentdb;User Id=root;Password=1234;"
}

Bây giờ chúng tôi phải thông báo về bối cảnh cơ sở dữ liệu hiện có của chúng tôi theo phương pháp

"ConnectionStrings": {
    "DBConn": "Server=localhost;port=3306;Database=studentdb;User Id=root;Password=1234;"
}
7 của
"ConnectionStrings": {
    "DBConn": "Server=localhost;port=3306;Database=studentdb;User Id=root;Password=1234;"
}
8. LƯU Ý rằng trong cấu hình, bạn phải sử dụng phương thức
"ConnectionStrings": {
    "DBConn": "Server=localhost;port=3306;Database=studentdb;User Id=root;Password=1234;"
}
9 thay vì
using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
using CRUDWebAPIWithMySQL.Models;
using Microsoft.EntityFrameworkCore;
0. Bạn phải nhập ba cái này.
using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
using CRUDWebAPIWithMySQL.Models;
using Microsoft.EntityFrameworkCore;
1,
using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
using CRUDWebAPIWithMySQL.Models;
using Microsoft.EntityFrameworkCore;
2 và lớp Model và DBContext của bạn nằm trong thư mục
"ConnectionStrings": {
    "DBConn": "Server=localhost;port=3306;Database=studentdb;User Id=root;Password=1234;"
}
2

using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
using CRUDWebAPIWithMySQL.Models;
using Microsoft.EntityFrameworkCore;

Sau đó, thêm phương thức

"ConnectionStrings": {
    "DBConn": "Server=localhost;port=3306;Database=studentdb;User Id=root;Password=1234;"
}
9 để kết nối

public void ConfigureServices(IServiceCollection services)
{
   services.AddDbContextPool<Your DBContext Class name>(
      options => options.UseMySql(Configuration.GetConnectionString(<Connection String Name>)
   ));
   services.AddMvc();
}

 public void ConfigureServices(IServiceCollection services)
{

    services.AddDbContextPool<StudentDetailContext>(
        options => options.UseMySql(Configuration.GetConnectionString("DBConn")
        ));
    services.AddControllers();
}

Sau đó tạo lớp

using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
using CRUDWebAPIWithMySQL.Models;
using Microsoft.EntityFrameworkCore;
5. VS tạo nó tự động. Làm theo các bước dưới đây

  • Nhấp vào nút bên phải của chuột và
    using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
    using CRUDWebAPIWithMySQL.Models;
    using Microsoft.EntityFrameworkCore;
    6

  • Chọn
    using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
    using CRUDWebAPIWithMySQL.Models;
    using Microsoft.EntityFrameworkCore;
    7

  • Chọn lớp Mô hình của bạn và Lớp ngữ cảnh DB của chúng tôi

Bước 7. di cư

Nếu bạn đã cài đặt Công cụ EF như tôi, thì bạn có thể chạy 2 lệnh tiếp theo trong Bảng điều khiển quản lý gói

mở

using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
using CRUDWebAPIWithMySQL.Models;
using Microsoft.EntityFrameworkCore;
8 của bạn

Add-Migration <MigrationName>
Update-Database

Đây là của tôi,

Add-Migration InitialCreate
Update-Database

Nếu có bất kỳ sự cố nào trong quá trình Di chuyển của bạn, hãy xóa các lần di chuyển trước đó của bạn

Remove-Migration

Sau khi di chuyển thành công, một bảng có tên

using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
using CRUDWebAPIWithMySQL.Models;
using Microsoft.EntityFrameworkCore;
9 trong cơ sở dữ liệu
public void ConfigureServices(IServiceCollection services)
{
   services.AddDbContextPool<Your DBContext Class name>(
      options => options.UseMySql(Configuration.GetConnectionString(<Connection String Name>)
   ));
   services.AddMvc();
}
0

Bước 8. Kiểm tra lần cuối

Bây giờ chúng ta đã sẵn sàng. Tôi đã tự thêm một số hàng. Mở

"ConnectionStrings": {
    "DBConn": "Server=;port=3306;Database=studentdb;User Id=root;Password=1234;"
}
8, sau đó chọn bảng của bạn rồi thêm một hàng

Làm cách nào để kết nối cơ sở dữ liệu MySQL với API web?

API Web Với ASP. NET 6 và MySQL .
tài nguyên cần thiết
ASP. Dự án API Web NET 6
Truy cập cơ sở dữ liệu với Entity Framework
Ghi 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
Chỉ huy
Bộ điều khiển cho API Web
A. Lấy danh sách tất cả người dùng đã đăng ký

Làm cách nào để kết nối cơ sở dữ liệu với API Web?

Đây là các bước chúng ta cần làm theo. .
Tạo dự án API Web trống
Chọn API Web trong cửa sổ chọn mẫu
Tạo bảng và Chèn dữ liệu vào bảng cơ sở dữ liệu
Thêm một dịch vụ web
Thêm một ADO. NET Entity Data Model
Tạo kết nối mới với máy chủ SQL
Tạo các thực thể từ Cơ sở dữ liệu
Thêm bộ điều khiển

Bạn có thể kết nối API với cơ sở dữ liệu không?

Giải pháp 3. Tự động lưu dữ liệu API vào cơ sở dữ liệu. Một cách khác để lấy dữ liệu từ API là thông qua phần mềm quản lý cơ sở dữ liệu đám mây, chẳng hạn như Acho. Tại đây, bạn có thể sử dụng trình kết nối API dựng sẵn để yêu cầu điểm cuối API một cách có hệ thống và lưu trữ dữ liệu trong cơ sở dữ liệu cho các ứng dụng trong tương lai .

Làm cách nào để tạo API cho cơ sở dữ liệu MySQL?

Trong thư mục dịch vụ, tạo một db. js và thêm các đoạn mã bên dưới vào tệp đó . const mysql = yêu cầu('mysql'); . createConnection({ máy chủ. "máy chủ cục bộ", người dùng. "gốc", mật khẩu. "1234", cơ sở dữ liệu. "việc cần làm", }); .