Sử dụng EF - tool: VisualStudio hoặc VSCode (Nên dùng VSCode để hiểu rõ hơn) 1. Tao template: (kiểm tra dotnet version?) dotnet new mvc -n project --------------------------- Tạo theo MVC theo version active trên máy (kiểm tra: dotnet --version. Các version >5 đều đa nền tảng và gọi chung .net chứ kg phân biệt .core hay .net fw) Xem danh sách version: dotnet --list-sdks Nếu muốn tạo version xác định (VD 8.0): dotnet new mvc -n pro --framework net8.0 2. Cài đặt các thư viện và tool: Thư viện: dotnet add package TenThuVien (phân biêt Hoa thường) dotnet add package Microsoft.EntityFrameworkCore dotnet add package Microsoft.EntityFrameworkCore.Tools dotnet add package Microsoft.EntityFrameworkCore.SqlServer dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design dotnet add package Pomelo.EntityFrameworkCore.Mysql Tool: dotnet tool install -g dotnet-ef dotnet tool install -g dotnet-aspnet-codegenerator ------------------------------------------- * Chú ý khi cài lỗi, có thể không có nuget source - Kiểm tra: dotnet nuget list source - Nếu không có nuget.org thì chạy lệnh sau: dotnet nuget add source https://api.nuget.org/v3/index.json - Kiểm tra lại dotnet nuget list source * thư viện: cú pháp: dotnet add package Lib_Name: Các thư viện sẽ được save trong %USERPROFILE%\.nuget\packages và trong project được khai báo trong file .csproj) * tool: cú pháp: dotnet tool install -g Tool_Name: Các tool lưu toàn cục (-g <=> --global) trong %USERPROFILE%\.dotnet\tools - dotnet tool install -g dotnet-ef (để quản lý db-model), - dotnet tool install -g dotnet-aspnet-codegenerator Giải thích các lib-tool - Microsoft.EntityframeworkCore: core library của Entity Framework Core — một ORM (Object-Relational Mapper) cho .NET - Microsoft.EntityFrameworkCore.Tools: Dùng cho lệnh dotnet ef (migrate, scaffold, update database). - Microsoft.EntityFrameworkCore.Design: Dành cho scaffolding (tạo code tự động khi reverse DB). - Microsoft.EntityFrameworkCore.SqlServer: Provider cho SQL Server - Pomelo.EntityFrameworkCore.MySql: Provider cho MySQL - Npgsql.EntityFrameworkCore.PostgreSQL Provider cho PostgreSQL - Microsoft.VisualStudio.Web.CodeGeneration.Design (tao controller CRUD...) - dotnet-ef, dotnet-aspnet-codegenerator: chạy lệnh tạo scaffold (controller/view, ... ) Kiểm tra: - Kiểm tra các package đã cài trong project xem trong .csproj hoặc lệnh dotnet list package - Kiểm tra các tool đã cài chưa: dotnet tool list -g 3. Tạo DbContext và các Models tương ứng (Database First - nếu đã có db) -Nếu sử dụng sqlserver: dotnet ef dbcontext scaffold "ConnectionString" Microsoft.EntityFrameworkCore.SqlServer -o Models Ví dụ: ConnectionString cho SqlServer: dotnet ef dbcontext scaffold "server=localhost; database=quanlysach; Trusted_Connection=True; TrustServerCertificate=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models - Nếu sử dụng mysql: dotnet ef dbcontext scaffold "ConnectionString" Pomelo.EntityFrameworkCore.MySql -o Models Ví dụ: dotnet ef dbcontext scaffold "server=localhost; database=quanlysach2; username=root; password=" Pomelo.EntityFrameworkCore.MySql -o Models -------------------------------------------------------- *** Code-First (EF tự tạo bảng từ model) Nếu tạo model trước, EF sẽ dựa vào class để tự sinh bảng và cột tương ứng trong DB. Ví dụ: public class Student { public int Id { get; set; } public string FullName { get; set; } } và DbContext: public class AppDbContext : DbContext { public DbSet Students { get; set; } } Sau đó chạy các lệnh sau, EF sẽ tự tạo bảng Students với các cột Id, FullName.: dotnet ef migrations add Init dotnet ef database update 4. Tạo scaffold crud: Tạo Controller sử dụng model với các method để CRUD DB Ví dụ: dotnet aspnet-codegenerator controller -name SachController -m Sach -dc MyDbContext --relativeFolderPath Controllers --useDefaultLayout ------------------------------------------------------ Giải thích: -dc (--dataContext): Nếu kg có, tự dò -m: Model -name: Tên controller --relativeFolderPath: Thư mục lưu controller --useDefaultLayout: Layout mặc định Chú ý: Nếu sử dụng với Mysql, có thể vẫn báo lỗi nếu không cài Microsoft.EntityFrameworkCore.SqlServer. => Cứ cài thêm (dù không sử dụng). 5. Hoàn thiện a- Tạo kết nối trong appsettings.json b- Sửa program.cs: để đọc kết nối và load DbContext c- Xóa kết nối trong DbContext a. appsettings.json "ConnectionStrings": {"MySqlConn":"Server=localhost; database=quanlysach2; username=root; password=", "SqlServerConnLocal": "server=localhost\\sqlexpress; database=quanlysach; Trusted_Connection=True; TrustServerCertificate=True;", "SqlServerConnSomee": "workstation id=db.mssql.somee.com;packet size=4096;user id=tintem2_SQLLogin_1;pwd=111111;data source=db.mssql.somee.com;persist security info=False;initial catalog=000tintem2;TrustServerCertificate=True", } b. program.cs, sau var builder = WebApplication.CreateBuilder(args); Nếu sử dụng Với sqlserver using project.Models; using Microsoft.EntityFrameworkCore; var connectionString = builder.Configuration.GetConnectionString("SqlServerConnLocal"); builder.Services.AddDbContext(options => options.UseSqlServer(connectionString)); ---------------------------------------------- Nếu sử dụng Mysql using project.Models; using Microsoft.EntityFrameworkCore; var conn = builder.Configuration.GetConnectionString("MySqlConn"); builder.Services.AddDbContext(o=>o.UseMySql(conn, ServerVersion.AutoDetect(conn))); ----------------------------------------------- MySQL có nhiều “biến thể” và “phiên bản” khác nhau. => Entity Framework Core cần biết đang dùng phiên bản nào để sinh ra SQL phù hợp khi chạy migration hoặc query; tránh lỗi tương thích khi EF Core tạo bảng hoặc truy vấn. 6./ Build hiện thực: dotnet run - chạy dựa vào file Properties/launchSettings.json - Có thể setup để chạy local trong file appsettings.Development.json (thay appsettings.json), khi publish sẽ tự động lấy biến trong appsettings.json 7. deploy A. Deploy ra folder, sử dụng folder để upload lên somee - Ra folder và upload lên somee: dotnet publish -c Release -o ./publish Giải thích: -c Release: Build ở chế độ phát hành (tối ưu, không debug). -o ./publish Chỉ định thư mục đầu ra. Có thể đổi ./publish thành bất cứ path nào. Có thể test thử bằng: dotnet publish/projectName.dll B. Deploy somee sử dụng FTP + curl (tích hợp trong github action) curl -T "{./publish/*}" ftp://username:password@app.somee.com/wwwroot/ username, password, app bằng thông tin thật trong Somee Dashboard. C. Deploy somee sử dụng CI/CD?