โอเค! 😎 เรามาเจาะลึก Microsoft.EntityFrameworkCore
(EF Core) แบบเข้าใจง่าย ๆ กัน
1️⃣ Microsoft.EntityFrameworkCore คืออะไร
-
EF Core เป็น ORM (Object-Relational Mapper) ของ .NET
-
ช่วยให้เราทำงานกับ Database ผ่าน C# Class แทนการเขียน SQL โดยตรง
-
รองรับหลาย database เช่น SQL Server, MySQL, PostgreSQL, SQLite, InMemory
-
ช่วยเรื่อง:
-
CRUD (Create, Read, Update, Delete)
-
Query แบบ LINQ
-
Migrations (สร้าง/อัปเดต database schema)
-
2️⃣ การติดตั้ง
ใช้ NuGet Package:
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools
-
Microsoft.EntityFrameworkCore.SqlServer → สำหรับ SQL Server
-
Microsoft.EntityFrameworkCore.Tools → ใช้สำหรับ CLI / Migration
3️⃣ สร้าง DbContext และ Entity
ตัวอย่าง:
using Microsoft.EntityFrameworkCore;
// Entity
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
// DbContext
public class AppDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// SQL Server connection string
optionsBuilder.UseSqlServer(@"Server=.;Database=MyDb;Trusted_Connection=True;");
}
}
4️⃣ การใช้งาน CRUD
Create (เพิ่มข้อมูล)
using var context = new AppDbContext();
var product = new Product { Name = "Laptop", Price = 25000 };
context.Products.Add(product);
context.SaveChanges();
Read (ดึงข้อมูล)
var products = context.Products.ToList();
var expensive = context.Products.FirstOrDefault(p => p.Price > 20000);
Update (แก้ไขข้อมูล)
var product = context.Products.Find(1);
if(product != null)
{
product.Price = 26000;
context.SaveChanges();
}
Delete (ลบข้อมูล)
var product = context.Products.Find(1);
if(product != null)
{
context.Products.Remove(product);
context.SaveChanges();
}
5️⃣ Migrations (สร้าง/อัปเดต Database)
-
สร้าง Migration:
dotnet ef migrations add InitialCreate
-
อัปเดต Database:
dotnet ef database update
-
Migration จะสร้าง ตารางตาม DbSet และ Entity อัตโนมัติ
6️⃣ LINQ Queries
// เลือกสินค้าแพงกว่า 20000
var result = context.Products
.Where(p => p.Price > 20000)
.OrderByDescending(p => p.Price)
.ToList();
-
EF Core จะแปลง LINQ เป็น SQL อัตโนมัติ
7️⃣ Tips การใช้งาน EF Core
-
ใช้ Async Methods:
SaveChangesAsync()
,ToListAsync()
-
ใช้ Dependency Injection สำหรับ
DbContext
ใน ASP.NET Core
services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
-
ใช้ Navigation Properties สำหรับ Relationship: One-to-Many, Many-to-Many
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public List<Product> Products { get; set; }
}
💡 สรุป:Microsoft.EntityFrameworkCore
ช่วยให้เราทำงานกับ Database แบบ OOP, ลดการเขียน SQL, ใช้ LINQ query, และรองรับ Migrations ทำให้พัฒนา Web API / Application ง่ายขึ้น