Chuyển đến nội dung chính

Bài đăng

Hướng dẫn sử dụng thư viện Mapster cho .NET

Mapster là một thư viện ánh xạ đối tượng (object-to-object mapping) mã nguồn mở, hiệu suất cao dành cho .NET, được tạo ra bởi Albert Huang. Nó giúp sao chép dữ liệu từ kiểu đối tượng này sang kiểu đối tượng khác (ví dụ: DTO sang Entity) một cách gọn nhẹ, nhanh chóng, thường được dùng thay thế cho AutoMapper. Cài đặt Mapster Bước đầu tiên là cài đặt package Mapster thông qua NuGet Package Manager Console: Install-Package Mapster Chuẩn bị môi trường (Model & DTO) Giả sử chúng ta có các class thực thể (Entities) và một class DTO (Data Transfer Object) để hứng dữ liệu: public class Person { public string Title { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime? DateOfBirth { get; set; } public Address Address { get; set; } } public class Address { public string Street { get; set; } public string City { get; set; } public string PostCode { get; set; } public string Country { get; set; } } publ...
Các bài đăng gần đây

AutoMapper → Mapperly trong ASP.NET MVC - Part 2

.NET ASP.NET Visual Studio Đây là phần 2 trong series modernize ASP.NET MVC 5 trên .NET Framework 4.8. Ở Part 1 , chúng ta đã migrate project sang SDK-style .csproj . Bây giờ nền móng đã sạch, có thể bắt đầu tối ưu phần “đụng nhiều nhất mỗi ngày”: mapping giữa entity và ViewModel . 1. Vì sao nên thay AutoMapper? AutoMapper rất tiện — nhưng cũng có những trade-off: Mapping diễn ra ở runtime → khó debug Logic bị “giấu” trong config Performance không tối ưu trong một số case Khi project lớn dần, những vấn đề này bắt đầu rõ ràng hơn. Giải pháp thay thế: compile-time mapping . Một trong những thư viện nổi bật: Mapperly . 2. Mapperly là gì? Mapperly sử dụng Source Generator để generate code mapping ngay lúc build. Nghĩa là: Không còn reflection Không còn runtime mapping Mapping = code C# thật (có thể debug) Hiểu đơn giản: thay vì “config mapping”, bạn “viết mapping — và tool generate phần còn lại”....

AutoMapper → Mapperly trong ASP.NET MVC - Part 1

.NET ASP.NET Visual Studio Đây là phần 1 trong series modernize ASP.NET MVC 5 trên .NET Framework 4.8. Series này gồm 2 phần: Part 1: migrate sang SDK-style .csproj Part 2: tích hợp compile-time mapping (Mapperly) Nếu nền móng project chưa ổn, việc tối ưu phía trên (mapping, performance, architecture) sẽ rất khó maintain về lâu dài. Vì vậy, bài này chỉ tập trung vào một việc duy nhất: chuyển project MVC 5 sang SDK-style và chạy ổn định với IIS Express . 1. Vấn đề của project legacy Hầu hết project ASP.NET MVC 5 lâu năm đều có đặc điểm chung: .csproj dạng cũ (old-style) Khai báo file thủ công Sử dụng packages.config Những vấn đề thường gặp: File .csproj dài hàng trăm dòng, khó đọc Thêm/xóa file → phải sửa project file Merge conflict xảy ra thường xuyên Project vẫn chạy — nhưng càng ngày càng khó maintain. 2. SDK-style giải quyết điều gì? SDK-style .csproj mang lại cách tiếp cận đơn giản h...

Hướng dẫn dùng GitHub Copilot + Custom Instruction trong Visual Studio 2026

Trong các dự án enterprise .NET, chúng ta thường có: Coding convention riêng Architecture pattern riêng Folder structure riêng Vấn đề là GitHub Copilot thường generate code theo pattern phổ biến trên internet , chứ không theo convention của project. Trong bài viết này mình thử nghiệm một cách “huấn luyện nhẹ” Copilot để nó tuân theo structure của project. Setup GitHub Copilot trong Visual Studio 2026 Tạo file copilot-instructions.md Structured prompt với constraints Setup GitHub Copilot trong Visual Studio 2026 Đăng nhập GitHub View → GitHub Copilot Chat Login GitHub account của bạn. Copilot sẽ hoạt động nếu bạn có: Copilot Individual Copilot Business Copilot Enterprise Test Copilot Tạo file: TestRepository.cs Viết comment: // create a generic repository for EF Core Nếu Copilot gợi ý code → setup thành công. Vấn đề khi dùng Copilot trong dự án thật Mục tiêu là rewrite theo pattern: Entity Framework Repository Pattern Unit Of Wo...

Giới thiệu Microsoft Access và ví dụ SQL cơ bản

Microsoft Access là hệ quản trị cơ sở dữ liệu dạng desktop thuộc bộ Microsoft Office. Nó thường được dùng cho các hệ thống nhỏ như quản lý nhân sự, quản lý kho, hoặc lưu dữ liệu từ máy chấm công. Trong bài viết này chúng ta sẽ: Tạo database đơn giản với 2 bảng Insert dữ liệu mẫu Thực hiện một số truy vấn SQL Tìm hiểu định dạng file Access cũ và mới 1. Tạo bảng Employees Bảng Employees lưu thông tin nhân viên. CREATE TABLE Employees ( EmployeeID AUTOINCREMENT PRIMARY KEY, FirstName TEXT(50), LastName TEXT(50), BirthDate DATETIME, Salary DOUBLE, Notes LONGTEXT, CreatedAt DATETIME ); Column Meaning EmployeeID ID tự tăng FirstName Tên LastName Họ BirthDate Ngày sinh Salary Lương Notes Ghi chú dài 2. Tạo bảng WorkLogs Bảng WorkLogs lưu thông tin giờ làm việc của nhân viên. CREATE TABLE WorkLogs ( LogID AUTOINCREMENT PRIMARY KEY, EmployeeID LONG, WorkDate DATETIME, HoursWorked INTEGER, Descr...

Python cho .NET Developer: pip, Virtual Environment và Flask

Nếu bạn là developer .NET, việc học Python sẽ dễ hơn nhiều khi có thể liên hệ với các khái niệm quen thuộc như NuGet, project dependency hay ASP.NET Minimal API. 1. pip là gì? pip là package manager của Python. Nó dùng để cài các thư viện giống như NuGet trong .NET. Cài Flask: pip install flask Kiểm tra các package đã cài: pip list 🧠 Mental Model pip ≈ NuGet. Pip là trình quản lý gói (package manager) tiêu chuẩn, không thể thiếu của Python, dùng để cài đặt, nâng cấp và quản lý các thư viện, phần mềm bổ sung không thuộc thư viện chuẩn từ Python Package Index (PyPI). Pip giúp đơn giản hóa quá trình phát triển, cho phép cài đặt nhanh các thư viện bên thứ ba (như pandas, requests) qua dòng lệnh 2. Virtual Environment là gì? Python thường được cài global trong hệ thống. Nếu nhiều project dùng version thư viện khác nhau sẽ dễ xảy ra xung đột. Virtual Environment (venv) tạo ra một môi trường Python riêng cho từng project. Tạo environment: python...

Tự phát triển Nuget package bằng C# .NET

Trong quá trình phát triển phần mềm, chúng ta thường viết những đoạn code có thể tái sử dụng nhiều lần: Các hàm thống kê Utility functions Helper cho ML pipelines Feature engineering Tuy nhiên nếu các đoạn code này nằm rải rác trong nhiều repository, việc bảo trì sẽ trở nên khó khăn. Giải pháp tốt nhất là đóng gói chúng thành một thư viện (library) và phát hành dưới dạng NuGet package. Trong bài viết này, chúng ta sẽ đi qua toàn bộ quy trình: Idea → Library → GitHub → CI/CD → NuGet Dựa trên kinh nghiệm thực tế khi xây dựng thư viện QuantEdge. Vì sao nên tạo NuGet Package? NuGet là hệ thống quản lý package chính thức của .NET ecosystem. Việc đóng gói code thành NuGet mang lại nhiều lợi ích.  Code Reusability  Easy Distribution  Version Control NuGet hỗ trợ Semantic Versioning: 1.0.0 → first version 1.0.1 → bug fix 1.1.0 → add feature 2.0.0 → breaking change Thiết kế kiến trúc project Trước khi viết code, nên tổ chức repository theo cấu trúc chuẩn. Ví ...