Xây dựng Web App ASP.NET Core và MongoDB (Phần 2)

bởi Canh Pham Duy

Sau phần 1, tôi tiếp tục giới thiệu series xây dựng Web App ASP.NET Core và MongoDB (Phần 2).

Thêm một Model

Bây giờ, chúng ta sẽ triển khai lớp model dữ liệu của chúng tôi (Phần Model của ứng dụng MVC).

Click chuột phải vào thư mục Models và chọn Add->Class.

Đặt tên class Car.cs và click Add.

Sau đó thêm các thuộc tính sau vào lớp:

using CarGalleryApp.CustomAttributes;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using System.ComponentModel.DataAnnotations;

namespace CarGalleryApp.Models
{
    public class Car
    {
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]
        public string Id { get; set; }

        [BsonElement("Brand")]
        [Required]
        public string Brand { get; set; }

        [BsonElement("Model")]
        [Required]
        public string Model { get; set; }

        [BsonElement("Year")]
        [Required]
        [YearRange]
        public int Year { get; set; }

        [BsonElement("Price")]
        [Display(Name = "Price($)")]
        [DisplayFormat(DataFormatString = "{0:#,0}")]
        public decimal Price { get; set; }

        [BsonElement("ImageUrl")]
        [Display(Name = "Photo")]
        [DataType(DataType.ImageUrl)]
        [Required]
        public string ImageUrl { get; set; }
    }

}

Trong lớp trước, thuộc tính Id:

  • là bắt buộc để ánh xạ đối tượng Common Language Runtime (CLR) vào collection MongoDB.
  • được chú thích bằng [BsonId] để chỉ định thuộc tính này làm khóa chính của tài liệu.
  • được chú thích bằng [BsonRepftimeation (BsonType.ObjectId)] để cho phép truyền tham số dưới dạng chuỗi kiểu thay vì ObjectId. Mongo xử lý việc chuyển đổi từ chuỗi sang ObjectId.

Các thuộc tính khác trong lớp được chú thích bằng thuộc tính [BsonEuity]. Giá trị thuộc tính biểu thị tên thuộc tính trong collection MongoDB.

Thuộc tính [YearRange] là thuộc tính tùy chỉnh chỉ cho phép phạm vi hợp lệ cho thuộc tính Year. Nếu bạn muốn sử dụng thuộc tính này, hãy thêm thư mục CustomAttributes trong dự án dưới dạng thư mục mới và thêm lớp sau vào đó:

using System;
using System.ComponentModel.DataAnnotations;

namespace CarGalleryApp.CustomAttributes
{
    public class YearRangeAttribute : RangeAttribute
    {
        public YearRangeAttribute() : base(typeof(int), DateTime.Now.AddYears(-50).Year.ToString(), DateTime.Now.AddYears(1).Year.ToString())
        { }
    }
}

Bạn có thể thay đổi phạm vi như bạn muốn.

Thêm một lớp Services CRUD

Trong phần này, chúng ta sẽ thêm lớp CarService sử dụng các thành viên MongoDB.Driver để thực hiện các hoạt động CRUD đối với cơ sở dữ liệu.

Đầu tiên, thêm một thư mục Services vào thư mục gốc của dự án.

Sau đó, thêm một lớp CarService vào thư mục này với mã sau:

using System.Linq;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
using MongoDB.Driver;
using CarGalleryApp.Models;

namespace CarGalleryApp.Services
{
    public class CarService
    {
        private readonly IMongoCollection<Car> cars;

        public CarService(IConfiguration config)
        {
            MongoClient client = new MongoClient(config.GetConnectionString("CarGalleryDb"));
            IMongoDatabase database = client.GetDatabase("CarGalleryDb");
            cars = database.GetCollection<Car>("Cars");
        }

        public List<Car> Get()
        {
            return cars.Find(car => true).ToList();
        }

        public Car Get(string id)
        {
            return cars.Find(car => car.Id == id).FirstOrDefault();
        }

        public Car Create(Car car)
        {
            cars.InsertOne(car);
            return car;
        }

        public void Update(string id, Car carIn)
        {
            cars.ReplaceOne(car => car.Id == id, carIn);
        }

        public void Remove(Car carIn)
        {
            cars.DeleteOne(car => car.Id == carIn.Id);
        }

        public void Remove(string id)
        {
            cars.DeleteOne(car => car.Id == id);
        }
    }
}

Tiếp theo, thêm chuỗi kết nối MongoDB vào appsinstall.json:

"ConnectionStrings": {
    "CarGalleryDb": "mongodb://localhost:27017"
  }

Thuộc tính CarGalleryDb được truy cập trong hàm tạo của lớp CarService.

Bây giờ, hãy cùng nhóm kiểm tra lớp CarService:

Lớp CarService sử dụng các thành viên MongoDB.Driver sau đây để thực hiện các hoạt động CRUD dựa trên cơ sở dữ liệu:

MongoClient: Đọc phiên bản máy chủ để thực hiện các hoạt động cơ sở dữ liệu. Hàm tạo của lớp này được cung cấp chuỗi kết nối MongoDB.

IMongoDatabase: Đại diện cho cơ sở dữ liệu Mongo để thực hiện các hoạt động. Phương thức GetCollection<T>(collection) chung trên giao diện được sử dụng để có quyền truy cập vào dữ liệu trong một bộ sưu tập cụ thể. Các hoạt động CRUD có thể được thực hiện đối với bộ sưu tập sau khi phương thức này được gọi. Trong phương thức GetCollection<T>(collection) gọi:

  • collection đại diện cho tên bộ sưu tập trong cơ sở dữ liệu.
  • T đại diện cho loại đối tượng CLR được lưu trữ trong bộ sưu tập.

GetCollection<T>(collection) trả về một đối tượng MongoCollection đại diện cho bộ sưu tập. Các phương thức sau được gọi trên bộ sưu tập:

  • Find<T>: Trả về tất cả các tài liệu trong bộ sưu tập khớp với tiêu chí tìm kiếm được cung cấp.
  • InsertOne: Chèn đối tượng được cung cấp dưới dạng tài liệu mới trong bộ sưu tập.
  • ReplaceOne: Thay thế tài liệu đơn phù hợp với tiêu chí tìm kiếm được cung cấp với đối tượng được cung cấp.
  • DeleteOne: Xóa một tài liệu phù hợp với tiêu chí tìm kiếm được cung cấp.

Đăng ký CarService với Dependency Injection System

ASP.NET Core được xây dựng với Dependency Injection (DI). Dịch vụ được đăng ký với DI trong quá trình khởi động ứng dụng. Các thành phần yêu cầu các dịch vụ này được cung cấp với các dịch vụ này thông qua các tham số của hàm tạo.

Bây giờ, chúng ta sẽ đăng ký lớp CarService với hệ thống Dependency Injection.

Thêm mã sau đây được hiển thị trong khung màu đỏ vào phương thức ConfigureService của Startup.cs:

Bây giờ, hãy build để kiểm tra xem mọi thứ có ổn không.

Thêm một Controller

Trong phần này, chúng tôi sẽ triển khai bộ controller (Phần Controller của ứng dụng MVC).

Nhấn chuột phải vào thư mục Controllers và chọn Add Controller…

Trong hộp thoại Add Scaffold, chọn MVC Controller with read/write actions:

Đặt tên CarsController làm tên và sau đó nhấn vào Add.

Thêm mã được tô sáng sau vào CarsController.cs:

Trong các phần tiếp theo, chúng tôi sẽ thực hiện các phương thức điều khiển và các khung nhìn liên quan đến chúng. Các bạn đón xem phần 3 tại đây nha!

Related Posts

1
Leave a Reply

avatar
1 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
canhpd Recent comment authors
  Subscribe  
newest oldest most voted
Notify of