
Entity Framework Core (Jak to działa dla programistów)
W dziedzinie nowoczesnego tworzenia oprogramowania kluczowe znaczenie ma efektywne zarządzanie danymi. Niezależnie od tego, czy tworzysz prostą aplikację, czy złożony system Enterprise, skuteczny dostęp do danych, ich przetwarzanie i zapisywanie to podstawowy wymóg. Entity Framework Core (EF Core) w języku C# to potężne narzędzie, które upraszcza dostęp do danych, zapewniając wygodne i zorientowane obiektowo podejście do pracy z bazami danych. W tym artykułe zagłębimy się w świat EF Core, badając jego funkcje, możliwości i najlepsze praktyki. Ponadto przyjrzymy się rozwiązaniu IronPDF firmy Iron Software Solutions, służącemu do obsługi dokumentów PDF, umożliwiającemu odczyt, zapis i zarządzanie dokumentami PDF. Stworzymy praktyczny przykład z wykorzystaniem obu pakietów.
Zrozumienie Entity Framework Core
Entity Framework Core to otwarta, lekka i rozszerzalna wersja popularnej technologii dostępu do danych Entity Framework. Zostało zaprojektowane do pracy na wielu platformach, obsługując różnych dostawców serwerów baz danych, w tym SQL Server, SQLite, MySQL, PostgreSQL, Azure Cosmos DB i inne. EF Core to nowoczesny mapper obiektowo-relacyjny, działający zgodnie z wzorcem ORM (Object-Relational Mapping), umożliwiający programistom pracę z bazami danych przy użyciu obiektów .NET, co eliminuje konieczność ręcznego pisania żmudnych zapytań SQL.
Kluczowe funkcje EF Core
-
Modelowanie encji: EF Core umożliwia programistom definiowanie modeli danych przy użyciu obiektów POCO (Plain Old CLR Objects). Te klasy encji reprezentują tabele bazy danych, a ich właściwości odpowiadają kolumnom tabel.
-
Obsługa LINQ: EF Core płynnie obsługuje zapytania LINQ (Language Integrated Query), umożliwiając programistom pisanie silnie typowanych zapytań do serwera SQL lub dowolnej innej bazy danych przy użyciu znanej składni C#. Dzięki temu wyszukiwanie danych jest intuicyjne i zmniejsza się prawdopodobieństwo wystąpienia błędów w czasie wykonywania. Ponadto można używać surowych instrukcji SQL wraz z zapytaniami LINQ.
-
Migracje baz danych: Zarządzanie zmianami schematu bazy danych może stanowić wyzwanie, zwłaszcza w środowisku zespołowym. EF Core upraszcza ten proces, zapewniając możliwości migracji baz danych, co pozwala programistom na wprowadzanie stopniowych zmian w schemacie bazy danych przy użyciu migracji typu "code-first".
-
Ładowanie leniwe i ładowanie natychmiastowe: EF Core obsługuje zarówno strategię ładowania leniwego, jak i natychmiastowego, umożliwiając programistom optymalizację wydajności poprzez ładowanie powiązanych danych na żądanie lub z wyprzedzeniem, w zależności od przypadku użycia.
-
Zarządzanie transakcjami: Transakcje zapewniają spójność i integralność danych podczas operacji na bazie danych. EF Core pozwala programistom na wyraźną obsługę transakcji, gwarantując, że grupa operacji na bazie danych zakończy się sukcesem lub niepowodzeniem jako całość.
-
Kontrola współbieżności: EF Core zapewnia wbudowaną obsługę zarządzania konfliktami współbieżności, umożliwiając programistom wykrywanie i rozwiązywanie konfliktów, które mogą powstać, gdy wielu użytkowników próbuje jednocześnie modyfikować te same dane.
Pierwsze kroki z EF Core
Stwórzmy prosty przykład użycia SQLite z Entity Framework Core (EF Core) w aplikacji ASP.NET Core. Oto kolejne kroki:
-
Utwórz swoją aplikację:
- Zacznij od utworzenia aplikacji konsolowej lub ASP.NET.
-
Zainstaluj niezbędne pakiety:
-
Dodaj do swojego projektu następujące pakiety NuGet:
- Microsoft.EntityFrameworkCore (wersja 1.0.0 lub nowsza)
- Microsoft.EntityFrameworkCore.Sqlite (wersja 1.0.0 lub nowsza)
-
-
Stwórz kontekst bazy danych:
-
Zdefiniuj klase dla swojego kontekstu bazy danych (np.
DatabaseContext), ktora dziedziczy zDbContext. -
W metodzie
OnConfiguringustaw SQLite connection string:public class DatabaseContext : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite("Filename=sample.db"); } }C#
-
-
Zarejestruj kontekst:
-
W swojej klasie
Startupdodaj swoj kontekst do uslug:public void ConfigureServices(IServiceCollection services) { services.AddEntityFrameworkSqlite().AddDbContext<DatabaseContext>(); }C#
-
-
Utwórz bazę danych podczas uruchamiania:
-
W konstruktorze
Startupstworz swoja baze danych:public Startup(IHostingEnvironment env) { using (var client = new DatabaseContext()) { client.Database.EnsureCreated(); } }C#
-
-
Wykorzystaj SQLite w swojej aplikacji:
- Teraz możesz używać SQLite w swojej aplikacji ASP.NET Core za pośrednictwem EF Core.
- Zdefiniuj swoje modele i uzyj
DatabaseContextdo interakcji z baza danych.
Należy pamiętać, że jest to podstawowy przykład i istnieją inne sposoby konfiguracji ciągu połączenia oraz korzystania z EF Core. Zapraszamy do zapoznania się z bardziej zaawansowanymi funkcjami i dostosowania ich do konkretnych potrzeb!
Najlepsze praktyki dotyczące programowania w EF Core
-
Ogranicz zakres DbContext: Instancje DbContext w EF Core są zaprojektowane tak, aby miały krótki czas życia i zazwyczaj powinny być ograniczone do czasu trwania pojedynczego żądania w aplikacjach internetowych.
-
Uzyj AsNoTracking do operacji tylko do odczytu: Podczas wykonywania operacji tylko do odczytu, w ktorych oczekuje sie, ze encje nie beda modyfikowane, uzyj metody
AsNoTracking, aby zwiekszyc wydajnosc poprzez pominiecie sledzenia zmian. -
Optymalizacja zapytań: Twórz wydajne zapytania, stosując odpowiednie techniki indeksowania, paginacji i filtrowania, aby zminimalizować ilość danych pobieranych z bazy danych.
-
Unikaj problemów związanych z zapytaniami N+1: Pamiętaj o problemie zapytań N+1, w którym zapytanie jest wykonywane dla każdego powiązanego elementu w zbiorze. Użyj ładowania z wyprzedzeniem (eager loading) lub ładowania jawnego (explicit loading), aby efektywnie pobierać powiązane dane.
-
Monitorowanie wydajności: Monitoruj wydajność EF Core za pomocą narzędzi takich jak Entity Framework Profiler lub wbudowanych funkcji logowania, aby zidentyfikować i wyeliminować wąskie gardła wydajności.
Wprowadzenie do IronPDF

IronPDF to potężna biblioteka C# do obsługi plików PDF, która pozwala generować, edytować i wyodrębniać treści z dokumentów PDF w projektach .NET. Oto kilka kluczowych funkcji:
-
Konwersja HTML do PDF:
- Konwersja treści HTML, CSS i JavaScript do formatu PDF.
- Użyj silnika renderującego Chrome, aby uzyskać pliki PDF o idealnej rozdzielczości.
- Generuj pliki PDF z adresów URL, plików HTML lub ciągów znaków HTML.
-
Konwersja obrazów i treści:
- Konwertuj obrazy do i z formatu PDF.
- Wyodrębnianie tekstu i obrazów z istniejących plików PDF.
- Obsługa różnych formatów obrazów.
-
Edycja i obróbka:
- Ustawianie właściwości, zabezpieczeń i uprawnień dla plików PDF.
- Dodaj podpisy cyfrowe.
- Edytuj metadane i historię zmian.
-
Obsługa wielu platform:
- Działa z .NET Core (8, 7, 6, 5 i 3.1+), .NET Standard (2.0+) oraz .NET Framework (4.6.2+).
- Kompatybilny z systemami Windows, Linux i macOS.
- Dostępne w serwisie NuGet, co ułatwia instalację.
Generowanie dokumentu PDF przy użyciu IronPDF wraz z EF Core
Na początek utwórz aplikację konsolową za pomocą programu Visual Studio, jak pokazano poniżej.

Podaj nazwę projektu.

Zapewnij wersję .NET na różne platformy.

Zainstaluj pakiet Microsoft.EntityFrameworkCore.

Zainstaluj pakiet Microsoft.EntityFrameworkCore.SqlLite.

Zainstaluj pakiet IronPDF.

Dodaj ponizszy kod do Program.cs.
using IronPdf;
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
namespace CodeSample
{
public class Program
{
public static void Main()
{
Console.WriteLine("-------------Demo EF core and IronPDF--------------");
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Start with initial HTML content
var content = "<h1>Demo EF core and IronPDF</h1>";
content += "<h2>Add Students</h2>";
// Add Students to Database
using (var client = new DatabaseContext())
{
client.Database.EnsureCreated(); // Create table if it doesn't exist
client.Students.ExecuteDelete(); // Ensure the table is clean
// Define students
var students = new[]
{
new Student { StudentName = "Bill", DateOfBirth = new DateTime(1990, 12, 01), Height = 5.45M, Weight = 56, Grade = 10 },
new Student { StudentName = "Mike", DateOfBirth = new DateTime(1992, 12, 06), Height = 4.45M, Weight = 34, Grade = 8 },
new Student { StudentName = "Peter", DateOfBirth = new DateTime(1990, 12, 03), Height = 5.0M, Weight = 50, Grade = 10 },
new Student { StudentName = "Bob", DateOfBirth = new DateTime(1990, 12, 09), Height = 4.56M, Weight = 56, Grade = 10 },
new Student { StudentName = "Harry", DateOfBirth = new DateTime(1990, 12, 21), Height = 5.6M, Weight = 56, Grade = 10 },
new Student { StudentName = "Charle", DateOfBirth = new DateTime(1993, 12, 11), Height = 5.5M, Weight = 56, Grade = 7 }
};
// Add students to database
client.Students.AddRange(students);
client.SaveChanges();
// Add students info to HTML content
foreach (var student in students)
{
content = AddStudent(content, student);
}
}
content += "<h2>Display Students in Database</h2>";
// Display Students in Database
using (var client = new DatabaseContext())
{
Console.WriteLine($"Displaying Students in Database:");
var students = client.Students.ToList();
foreach (var student in students)
{
Console.WriteLine($"Name= {student.StudentName}, ID={student.StudentID}, Grade={student.Grade}, Weight={student.Weight}, Height={student.Height}");
content = AddStudent(content, student);
}
}
// Render HTML content to PDF
var pdf = renderer.RenderHtmlAsPdf(content);
// Export to a file or stream
pdf.SaveAs("AwesomeEfCoreAndIronPdf.pdf");
}
// Helper method to add student info as HTML content
private static string AddStudent(string content, Student student)
{
content += $"<p Name = {student.StudentName}, ID={student.StudentID}, Grade={student.Grade}, Weight={student.Weight}, Height={student.Height}</p>";
return content;
}
}
public class DatabaseContext : DbContext
{
public DbSet<Student> Students { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Filename=IronPdfDemo.db");
}
}
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public DateTime? DateOfBirth { get; set; }
public decimal Height { get; set; }
public float Weight { get; set; }
public int Grade { get; set; }
}
}
Wyjaśnienie kodu
-
Konfigurowanie Renderera i treści:
- Kod rozpoczyna sie od utworzenia ciagu HTML z naglowkiem (
<h1>) i podnaglowkiem (<h2>) do dodania studentow do bazy danych. - Celem jest wygenerowanie dokumentu PDF przy użyciu IronPDF, który będzie zawierał informacje o studentach.
- Kod rozpoczyna sie od utworzenia ciagu HTML z naglowkiem (
-
Kontekst bazy danych i dodawanie studentów:
- Klasa
DatabaseContextjest uzywana do interakcji z baza danych. client.Database.EnsureCreated();zapewnia, ze baza danych i tabela istnieja.client.Students.ExecuteDelete();usuwa wszelkie istniejace dane z tabeliStudents.- Studenci są definiowani i dodawani do bazy danych. Wlasciwosci zawieraja
StudentName,DateOfBirth,Height,WeightorazGrade. client.SaveChanges();zapisuje zmiany w bazie danych.
- Klasa
-
Wyświetlanie studentów:
- Kod pobiera wszystkich studentow za pomoca
client.Students.ToList();. - Dla każdego ucznia drukuje jego imię i nazwisko, numer identyfikacyjny, ocenę, wagę i wzrost, a następnie dodaje te informacje do treści HTML.
- Kod pobiera wszystkich studentow za pomoca
-
Generowanie do PDF:
ChromePdfRendererjest instancjonowana.- Zawartosc HTML jest renderowana do PDF za pomoca
renderer.RenderHtmlAsPdf(content). - Na koniec plik PDF jest zapisywany jako "AwesomeEfCoreAndIronPdf.pdf".
Wynik


Licencjonowanie IronPDF
Pakiet IronPDF wymaga licencji do uruchomienia i generowania plików PDF. Dodaj poniższy kod na początku aplikacji, zanim nastąpi dostęp do pakietu.
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";Imports IronPdf
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY"Licencja Trial jest dostępna na stronie licencyjnej IronPDF.
Wnioski
Entity Framework Core w języku C# zapewnia solidny i intuicyjny sposób interakcji z bazami danych, oferując gotowe do użycia funkcje, takie jak obsługa LINQ, migracje baz danych i zarządzanie transakcjami. Stosując się do najlepszych praktyk i wykorzystując jego potężne możliwości, programiści mogą z łatwością tworzyć skalowalne i łatwe w utrzymaniu aplikacje. Niezależnie od tego, czy jesteś doświadczonym programistą, czy dopiero zaczynasz, EF Core jest cennym narzędziem, które warto mieć w swoim zestawie narzędzi do nowoczesnego dostępu do danych w aplikacjach C#. Z drugiej strony, IronPDF to biblioteka .NET służąca do tworzenia, edycji i renderowania dokumentów PDF w ramach aplikacji. Można go używać razem z EF Core do konwersji treści HTML (w tym obrazów) do pliku PDF.

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.
Powiązane artykuły


