Tìm hiểu về Entity Framework Core trong ASP.NET Core, cách cài đặt, cấu hình, sử dụng DbContext, Migrations, CRUD và tối ưu hóa truy vấn LINQ.

Giới thiệu về Entity Framework Core
Entity Framework Core (EF Core) là một ORM (Object-Relational Mapper) mạnh mẽ, giúp làm việc với cơ sở dữ liệu một cách dễ dàng trong ứng dụng ASP.NET Core. Nó cung cấp cách tiếp cận hướng đối tượng để tương tác với cơ sở dữ liệu, thay vì phải viết truy vấn SQL thủ công.
Lợi ích của Entity Framework Core
- Hỗ trợ đa nền tảng: Chạy trên Windows, Linux, macOS.
- Hỗ trợ nhiều loại cơ sở dữ liệu: SQL Server, MySQL, PostgreSQL, SQLite, Oracle,…
- Tích hợp tốt với ASP.NET Core: Quản lý kết nối DB dễ dàng thông qua Dependency Injection.
- Hỗ trợ LINQ: Viết truy vấn dễ dàng bằng cú pháp C#.
- Migrations: Hỗ trợ cập nhật schema database mà không cần SQL thủ công.
Cài đặt Entity Framework Core trong ASP.NET Core
Trước tiên, cần cài đặt các package EF Core thông qua NuGet Package Manager hoặc .NET CLI.
Cài đặt qua .NET CLI
Chạy lệnh sau để cài đặt EF Core với SQL Server:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.Tools
Nếu sử dụng MySQL, PostgreSQL hoặc SQLite, bạn có thể thay thế SqlServer
bằng:
- MySQL:
Pomelo.EntityFrameworkCore.MySql
- PostgreSQL:
Npgsql.EntityFrameworkCore.PostgreSQL
- SQLite:
Microsoft.EntityFrameworkCore.Sqlite
Cấu hình Entity Framework Core trong ASP.NET Core
Tạo lớp DbContext
Lớp DbContext
là trung tâm của EF Core, giúp quản lý truy vấn và cập nhật dữ liệu.
Ví dụ, tạo lớp AppDbContext
để làm việc với database:
using Microsoft.EntityFrameworkCore;
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
public DbSet<Product> Products { get; set; }
}
Cấu hình DbContext
trong Program.cs
Thêm cấu hình Entity Framework Core vào dependency injection container trong Program.cs
:
var builder = WebApplication.CreateBuilder(args);
// Cấu hình chuỗi kết nối
string connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
// Đăng ký DbContext
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(connectionString));
var app = builder.Build();
Cấu hình chuỗi kết nối trong appsettings.json
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=MyAppDB;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Định nghĩa mô hình dữ liệu trong EF Core
Tạo một class đại diện cho bảng trong database. Ví dụ, bảng Products
:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public int Stock { get; set; }
}
EF Core sẽ tự động ánh xạ class Product
này thành bảng Products
trong database.
Migration trong Entity Framework Core
Tạo Migration
Chạy lệnh sau để tạo Migration:
dotnet ef migrations add InitialCreate
Lệnh này sẽ tạo các file migration chứa các lệnh SQL tương ứng.
Áp dụng Migration vào Database
Chạy lệnh sau để tạo database và các bảng:
dotnet ef database update
CRUD trong Entity Framework Core (Create, Read, Update, Delete)
Thêm dữ liệu vào database (Create)
using (var context = new AppDbContext(options))
{
var product = new Product { Name = "Laptop", Price = 1500, Stock = 10 };
context.Products.Add(product);
context.SaveChanges();
}
Lấy dữ liệu từ database (Read)
var products = context.Products.ToList();
Cập nhật dữ liệu (Update)
var product = context.Products.FirstOrDefault(p => p.Id == 1);
if (product != null)
{
product.Price = 1200;
context.SaveChanges();
}
Xóa dữ liệu (Delete)
var product = context.Products.FirstOrDefault(p => p.Id == 1);
if (product != null)
{
context.Products.Remove(product);
context.SaveChanges();
}
Sử dụng EF Core trong API Controller
Tạo Controller với EF Core
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
private readonly AppDbContext _context;
public ProductsController(AppDbContext context)
{
_context = context;
}
[HttpGet]
public IActionResult GetProducts()
{
var products = _context.Products.ToList();
return Ok(products);
}
[HttpPost]
public IActionResult CreateProduct(Product product)
{
_context.Products.Add(product);
_context.SaveChanges();
return CreatedAtAction(nameof(GetProducts), new { id = product.Id }, product);
}
}
Query tối ưu với LINQ và AsNoTracking
EF Core hỗ trợ LINQ giúp truy vấn dữ liệu hiệu quả:
var expensiveProducts = _context.Products
.Where(p => p.Price > 1000)
.OrderByDescending(p => p.Price)
.ToList();
Tối ưu hiệu suất với AsNoTracking()
Sử dụng AsNoTracking để cải thiện hiệu suất cho truy vấn chỉ đọc:
var products = _context.Products.AsNoTracking().ToList();
Những lưu ý khi sử dụng Entity Framework Core
- Chọn loại Database phù hợp: SQL Server, MySQL, PostgreSQL,…
- Sử dụng AsNoTracking() khi không cần theo dõi dữ liệu để tăng hiệu suất.
- Dùng Index để tối ưu hóa truy vấn trên các cột thường xuyên tìm kiếm.
- Hạn chế truy vấn n+1 bằng cách sử dụng
Include()
khi cần truy vấn dữ liệu liên quan
var orders = _context.Orders.Include(o => o.Customer).ToList();
Cân nhắc sử dụng Raw SQL khi cần hiệu suất cao:
var products = _context.Products.FromSqlRaw("SELECT * FROM Products").ToList();
Kết luận
Entity Framework Core giúp đơn giản hóa thao tác với cơ sở dữ liệu trong ASP.NET Core. Bằng cách sử dụng DbContext, LINQ, Migrations, bạn có thể xây dựng ứng dụng mạnh mẽ, hiệu suất cao.
Tóm tắt nhanh:
- Hỗ trợ nhiều loại Database
- Tích hợp tốt với ASP.NET Core
- Dễ dàng sử dụng với LINQ
- Tối ưu hiệu suất với AsNoTracking
CÔNG TY TNHH GIẢI PHÁP CÔNG NGHỆ TRANG DESIGNER
Trang Designer chuyên thiết kế website chuẩn SEO, thiết kế logo toàn diện giúp doanh nghiệp xây dựng một thương hiệu mạnh và bán hàng hiệu quả trên các nền tảng số cho nhiều lĩnh vực kinh doanh.
Vui lòng liên hệ: 138 Hiền Vương, Phường Phú Thạnh, Quận Tân Phú, TP. Hồ Chí Minh
Điện thoại: 0903.728.335
Website: www.trangdesigner.id.vn