Trang Designer – Thiết kế website – Mua bán theme giá rẻ, plugin giá rẻ – Dịch vụ thiết kế website giá rẻ chuyên nghiệp chuẩn SEO – Mua bán theme giá rẻ, plugin giá rẻ chính hãng 100% từ nhà cung cấp, hỗ trợ update trọn đời

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.
Tìm hiểu về Entity Framework Core trong ASP.NET Core
Tìm hiểu về Entity Framework Core trong ASP.NET Core

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

  1. Chọn loại Database phù hợp: SQL Server, MySQL, PostgreSQL,…
  2. Sử dụng AsNoTracking() khi không cần theo dõi dữ liệu để tăng hiệu suất.
  3. 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.
  4. 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

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

pzf-icon