.NET API - CRUD باستخدام Entity Framework Core (مع قاعدة بيانات SQLite أو SQL Server)

1.6 ‎.NET API - CRUD باستخدام Entity Framework Core (مع قاعدة بيانات SQLite أو SQL Server)

في هذا الدرس سنتعلم كيفية تنفيذ العمليات الأساسية CRUD (إنشاء، قراءة، تحديث، حذف) باستخدام Entity Framework Core وربطها بـ Web API.

📦 ما هو EF Core؟

Entity Framework Core هو ORM (Object-Relational Mapper) يتيح لك التعامل مع قاعدة البيانات ككائنات C# بدون الحاجة لكتابة SQL يدوي.

🔧 1. إعداد المشروع لاستخدام EF Core

أولاً، نثبّت الحزم المطلوبة:

dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools

إذا كنت تفضل SQLite:

dotnet add package Microsoft.EntityFrameworkCore.Sqlite

📄 2. إنشاء الكيان (Model)

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

🧠 3. إنشاء DbContext

using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions options) : base(options) { }

    public DbSet<Product> Products { get; set; }
}

⚙️ 4. تسجيل DbContext في Program.cs

builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

// أو لـ SQLite
// options.UseSqlite("Data Source=mydb.db")

وأضف الاتصال في appsettings.json:

"ConnectionStrings": {
  "DefaultConnection": "Server=.;Database=MyDb;Trusted_Connection=True;"
}

🧱 5. إنشاء قاعدة البيانات

dotnet ef migrations add InitialCreate
dotnet ef database update

🚀 6. إنشاء Controller CRUD

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    private readonly AppDbContext _context;
    public ProductsController(AppDbContext context) => _context = context;

    [HttpGet]
    public async Task<ActionResult> Get() =>
        Ok(await _context.Products.ToListAsync());

    [HttpGet("{id}")]
    public async Task<ActionResult> Get(int id)
    {
        var item = await _context.Products.FindAsync(id);
        if (item == null) return NotFound();
        return Ok(item);
    }

    [HttpPost]
    public async Task<ActionResult> Post(Product product)
    {
        _context.Products.Add(product);
        await _context.SaveChangesAsync();
        return CreatedAtAction(nameof(Get), new { id = product.Id }, product);
    }

    [HttpPut("{id}")]
    public async Task<ActionResult> Put(int id, Product product)
    {
        if (id != product.Id) return BadRequest();
        _context.Entry(product).State = EntityState.Modified;
        await _context.SaveChangesAsync();
        return NoContent();
    }

    [HttpDelete("{id}")]
    public async Task<ActionResult> Delete(int id)
    {
        var product = await _context.Products.FindAsync(id);
        if (product == null) return NotFound();
        _context.Products.Remove(product);
        await _context.SaveChangesAsync();
        return NoContent();
    }
}

📌 خلاصة

  • ✅ EF Core يجعل العمل مع قواعد البيانات أكثر سهولة.
  • ✅ بإمكانك تنفيذ كل عمليات CRUD بكود C# فقط.
  • ✅ يمكنك استخدام SQL Server أو SQLite حسب الحاجة.

تعليقات

المشاركات الشائعة من هذه المدونة

HTML - Text Formatting تنسيقات النص

1.1 SQL Introduction

Entity Framework - مقدمة عن Entity Framework