Entity Framework (EF) là một Object-Relational Mapping (ORM) framework của Microsoft, cho phép bạn làm việc với cơ sở dữ liệu bằng cách sử dụng các đối tượng .NET thay vì phải viết SQL trực tiếp. EF giúp giảm thiểu việc viết mã và quản lý các thao tác truy xuất dữ liệu, từ đó tăng năng suất và giảm thiểu lỗi khi phát triển ứng dụng.

Các khái niệm cơ bản của Entity Framework
- ORM (Object-Relational Mapping): EF giúp ánh xạ các bảng trong cơ sở dữ liệu thành các lớp (class) trong ứng dụng của bạn. Bạn có thể thao tác với dữ liệu dưới dạng các đối tượng (object) thay vì làm việc trực tiếp với SQL.
- Code-First vs. Database-First:
- Code-First: Bạn định nghĩa các mô hình dữ liệu (entities) và EF sẽ tạo ra cơ sở dữ liệu dựa trên các định nghĩa này. Đây là phương pháp linh hoạt và được ưa chuộng trong nhiều dự án mới.
- Database-First: Bạn bắt đầu với cơ sở dữ liệu có sẵn và sử dụng các công cụ của EF để tạo ra các lớp (entity classes) từ cơ sở dữ liệu đó.
Cài đặt và cấu hình EF Core trong ASP.NET Core Web API
Cài đặt các package cần thiết:
Trong file dự án (.csproj
), bạn cần thêm các package như sau:
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools
Định nghĩa model (entity):
Ví dụ, tạo một lớp Product
:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
Tạo DbContext:
Tạo lớp AppDbContext
kế thừa từ DbContext
để quản lý các entity:
using Microsoft.EntityFrameworkCore;
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options)
{ }
public DbSet<Product> Products { get; set; }
}
Cấu hình kết nối trong Program.cs
hoặc Startup.cs
:
Trong ASP.NET Core (phiên bản 6 trở lên, dùng Program.cs
):
var builder = WebApplication.CreateBuilder(args);
// Đọc chuỗi kết nối từ appsettings.json
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
// Đăng ký DbContext với Dependency Injection
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(connectionString));
builder.Services.AddControllers();
var app = builder.Build();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Trong file appsettings.json
, thêm chuỗi kết nối:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"
}
}
Tạo các API Controller sử dụng EF Core
Tạo một controller để thực hiện các thao tác CRUD trên Product
. Ví dụ:
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
private readonly AppDbContext _context;
public ProductsController(AppDbContext context)
{
_context = context;
}
// GET: api/Products
[HttpGet]
public async Task<ActionResult<IEnumerable<Product>>> GetProducts()
{
return await _context.Products.ToListAsync();
}
// GET: api/Products/5
[HttpGet("{id}")]
public async Task<ActionResult<Product>> GetProduct(int id)
{
var product = await _context.Products.FindAsync(id);
if (product == null)
return NotFound();
return product;
}
// POST: api/Products
[HttpPost]
public async Task<ActionResult<Product>> PostProduct(Product product)
{
_context.Products.Add(product);
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetProduct), new { id = product.Id }, product);
}
// PUT: api/Products/5
[HttpPut("{id}")]
public async Task<IActionResult> PutProduct(int id, Product product)
{
if (id != product.Id)
return BadRequest();
_context.Entry(product).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!_context.Products.Any(e => e.Id == id))
return NotFound();
else
throw;
}
return NoContent();
}
// DELETE: api/Products/5
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteProduct(int id)
{
var product = await _context.Products.FindAsync(id);
if (product == null)
return NotFound();
_context.Products.Remove(product);
await _context.SaveChangesAsync();
return NoContent();
}
}
Sử dụng Migrations để tạo và cập nhật cơ sở dữ liệu
Sau khi cấu hình xong DbContext và các entity, bạn cần tạo migration và cập nhật cơ sở dữ liệu:
Tạo migration:
dotnet ef migrations add InitialCreate
Cập nhật cơ sở dữ liệu:
dotnet ef database update
Migrations sẽ giúp bạn theo dõi và quản lý các thay đổi trong mô hình dữ liệu theo thời gian.
Ưu điểm khi sử dụng Entity Framework trong ASP.NET Core Web API
- Tăng năng suất phát triển: Giảm thiểu việc viết SQL thủ công.
- Bảo trì dễ dàng: Mô hình dữ liệu được định nghĩa trong code dễ dàng thay đổi và quản lý.
- Tính trừu tượng: EF cung cấp một lớp trừu tượng giữa ứng dụng và cơ sở dữ liệu, giúp ứng dụng dễ dàng chuyển đổi giữa các hệ quản trị cơ sở dữ liệu khác nhau.
- Hỗ trợ LINQ: Cho phép truy vấn dữ liệu theo kiểu LINQ, làm cho code trở nên dễ đọc và dễ bảo trì.
Kết luận
Entity Framework Core là một công cụ mạnh mẽ giúp bạn làm việc với cơ sở dữ liệu một cách hiệu quả trong ASP.NET Core Web API. Bằng cách sử dụng EF, bạn có thể tập trung vào việc xây dựng logic nghiệp vụ của ứng dụng mà không cần lo lắng quá nhiều về các chi tiết của truy xuất dữ liệu.
Hy vọng với hướng dẫn trên, bạn đã có cái nhìn tổng quan về cách tích hợp và sử dụng Entity Framework trong dự án ASP.NET Core Web API của mình. Nếu có bất kỳ thắc mắc hoặc cần trợ giúp thêm, hãy thoải mái hỏi nhé!
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