Entity Framework Core

Tiếp theo, chúng ta sẽ thêm Entity Framework Core vào dự án để thao tác với CSDL.

  1. Thêm chuỗi kết nối CSDL vào file appsettings.json với tên tự chọn (ví dụ DemoContext)

    {
        /* Các cài đặt khác */
        "ConnectionStrings": {
            "DemoContext": "Server=localhost;Database=DemoDB;User Id=demouser;Password=demopass;"
        }
    }
    

    Gợi ý: Nếu bạn lưu source code lên Gitlab hoặc Github, thêm appsettings.json vào file .gitignore để tránh công khai tham số kết nối đến CSDL.

  2. Mở trình quản lý NuGet

    NuGet

  3. Cài đặt các thư viện sau tùy vào hệ quản trị CSDL:

    • Microsoft.EntityFrameworkCore.SqlServer
    • Microsoft.EntityFrameworkCore.Sqlite
    • Npgsql.EntityFrameworkCore.PostgreSQL
    • MySql.Data.EntityFrameworkCore
    • Danh sách các thư viện khác tại Microsoft Docs
  4. Cài thêm gói Microsoft.EntityFrameworkCore.Tools để hỗ trợ phát sinh model từ CSDL có sẵn (database-first)

  5. Mở cửa sổ Package Manager Console ở góc phải dưới Visual Studio, gõ vào dòng lệnh để tự động tạo model từ CSDL với thông số kết nối đã thêm vào appsettings.json.

    Scaffold-DbContext Name=DemoContext Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models/EFCore -DataAnnotations
    

    Trong đó 2 tham số đầu tiên không cần viết tên tham số nếu đặt đúng thứ tự:

    • -Connection: chuỗi kết nối đến CSDL hoặc tên được khai báo trong appsettings.json (bắt buộc, tham số đầu tiên).
    • -Provider: thư viện dùng kết nối đến CSDL tùy vào hệ quản trị CSDL (bắt buộc, tham số thứ 2).
    • -OutputDir: thư mục lưu các class được sinh ra.
    • -DataAnnotations: tham số này dùng để sinh metadata cho các model được sinh ra (cần attribute [Key] cho khóa chính để xây dựng các controller OData sau này).
    • Các tham số khác của công cụ Scaffold-DbContext tham khảo tại Microsoft Docs.
  6. Thêm nội dung sau vào file Startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<AdventureWorksContext>();
        /* các cài đặt khác */
    }