Упражнение №4 - Entity Framework и база данни | Програмни Среди
Прескочи до съдържанието
Упражнение №4 - Entity Framework и база данни
Published:

Упражнение №4 - Entity Framework и база данни

Table of contents

Open Table of contents

Въведение

Цел на упражнението

Запознаване с работа с база данни чрез Entity Framework (EF Core) и неговата интеграция в C# проекти.

Задачите в упражнението изграждат:

  • Малка студентска информационна система

В това упражнение:

  • Създаване на база данни и свързване с EF Core
  • Записване и четене на потребители от база данни

Очакван резултат

Ще създадем възможност да съхраняваме потребители директно в база данни, вместо статично в кода.

Задачи за домашна работа

  1. Добавяне на Logger, който да записва логове директно в базата данни.
  2. Създаване на меню в приложението за избор на операции с потребители:
  • Преглед на всички потребители
  • Добавяне на нов потребител (въвеждане на име и парола)
  • Изтриване на съществуващ потребител (по име)

Важни концепции

  • Entity Framework (EF Core)
  • Работа с база данни
  • ORM (Object-Relational Mapping)
  • SQLite
  • LINQ

Зареждане на проект в Visual Studio

  1. Отворете Visual Studio.
  2. Заредете Solution-а от предишните упражнения.
  3. Създайте нов проект с име DataLayer.
  4. Добавете референция към Welcome:
  • Десен бутон върху Dependencies на DataLayerAdd Project Reference…
  • Изберете проекта Welcome.

Разширяване на проекта DataLayer

Създаване на папки

  1. В Solution Explorerдесен бутон върху DataLayerAddNew Folder.
  2. Създайте следните папки:
  • Database
  • Model

Добавяне на външни библиотеки (NuGet)

  1. Десен бутон върху DependenciesManage NuGet Packages…
  2. Инсталирайте следните пакети:
  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.Sqlite
  • Microsoft.EntityFrameworkCore.Tools

Създаване на клас DatabaseUser

  1. В папка ModelAddNew Item…ClassDatabaseUser.cs.
  2. Класът трябва да наследява User от Welcome и да добави Id с override:
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

public class DatabaseUser : User
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public override int Id { get; set; }
}

Създаване на клас DatabaseContext

  1. В папка DatabaseAddNew Item…ClassDatabaseContext.cs.
  2. Добавете следния код:
using Microsoft.EntityFrameworkCore;

public class DatabaseContext : DbContext
{
    public DbSet<DatabaseUser> Users { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Data Source=users.db");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<DatabaseUser>().HasData(
            new DatabaseUser { Id = 1, Username = "Admin", Password = "admin", Role = UserRole.Administrator, Expires = DateTime.UtcNow.AddYears(1) }
        );
    }
}

Навързване на кода в Program.cs

using (var db = new DatabaseContext())
{
    db.Database.EnsureCreated();
    
    db.Users.Add(new DatabaseUser { Username = "User1", Password = "123", Role = UserRole.Student });
    db.SaveChanges();
    
    var users = db.Users.ToList();
    Console.WriteLine("Потребители в базата:");
    foreach (var user in users)
    {
        Console.WriteLine($"ID: {user.Id}, Username: {user.Username}, Role: {user.Role}");
    }
}

Добавяне на функционалност за вход

  1. Добавете възможност за вход чрез конзолата:
Console.Write("Enter username: ");
string username = Console.ReadLine();
Console.Write("Enter password: ");
string password = Console.ReadLine();

using (var db = new DatabaseContext())
{
    var user = db.Users.FirstOrDefault(u => u.Username == username && u.Password == password);
    if (user != null)
        Console.WriteLine("Валиден потребител!");
    else
        Console.WriteLine("Невалидни данни!");
}

Заключение

След изпълнението на тези стъпки ще имаме конзолно приложение, което работи с Entity Framework Core, позволявайки запис, четене и удостоверяване на потребители.

Бележка: В следващи упражнения ще добавим логване на действия в база данни и графичен интерфейс.