„Háttéralkalmazások/Záróvizsgatételek” változatai közötti eltérés
→3. ORM: Tétel kidolgozása |
→4. EF Core: Tétel kidolgozása |
||
| 368. sor: | 368. sor: | ||
|} | |} | ||
== 4. EF | == 4. EF == | ||
=== Mi az Entity Framework? === | === Mi az Entity Framework? === | ||
... | Az Entity Framework az ADO.NET-re és a .NET Frameworkre épülő ORM-keretrendszer. A 2016-ban kiadott, .NET Core-alapon újraírt, nyílt forráskódú verzió neve ''Entity Framework '''Core'''''. | ||
Teljesen moduláris, az egyes részeit NuGet-csomagokból lehet importálni. A JDBC-hez hasonlóan drivereket biztosít az egyes RDBMS-ekhez. Az ORM mellett a LINQ-eket futásidőben SQL-kódra fordítja le és hajtja végre. | |||
=== Mikor használjuk, és mikor nem? === | === Mikor használjuk, és mikor nem? === | ||
.. | |||
==== Mikor nem használjuk ==== | |||
* legacy kódban, ami közvetlenül használja az ADO.NET-et, és nyers SQL-parancsok szerepelnek benne, amiket nem éri meg migrálni EF-be | |||
* teljesítménykritikus környezetekben, ahol | |||
** nem megengedhető az ORM overheadje | |||
** nem bízható rá az SQL-parancsok generálása az EF-re (pl. költségoptimalizálás miatt) | |||
* tömeges műveleteknél | |||
==== Mikor használjuk ==== | |||
Avagy mik az előnyei: | |||
* ORM | |||
* LINQ | |||
* kódból történő migrációk (sémafrissítés) | |||
* lazy loading | |||
* párhuzamosság és konkurenciakezelés | |||
* előre lefordított és cache-elt lekérdezések | |||
=== Mi a <code>DbContext</code>? === | === Mi a <code>DbContext</code>? === | ||
... | Egy EF Core-beli osztály, mely egy adatbázis-munkamenetet reprezentál. Általában a DAL-ban hozunk létre egy <code>DbContext</code>-ből leszármazó osztályt. Az entitások felderítésében segíti az EF-et, ha <code>DbSet<Entity></code> tagváltozókat is megadunk. Egy <code>DbContextOptions</code> objektum átadásával – mely tartalmazza az adatbázis típusát és connection stringjét – lehet példányosítani. | ||
A service layernek DI-vel adjuk át a <code>DbContext</code>-et, és annak tagfüggvényeit meghívva lehet LINQ-ket futtatni. | |||
=== Milyen három modellezési lehetőségünk van adatmodell készítésére? === | |||
{| class="wikitable" | |||
! | |||
!példa | |||
!előnyei | |||
|- | |||
|automatikus | |||
|<syntaxhighlight lang="csharp" line="1">public class Book | |||
{ | |||
public int Id { get; set; } | |||
public string Title { get; set; } | |||
public string Isbn { get; set; } | |||
}</syntaxhighlight> | |||
| | |||
* nem szükséges további konfiguráció | |||
* a konvenciók alkalmazása kiváltja a további kód írását | |||
|- | |||
|annotációk | |||
|<syntaxhighlight lang="csharp" line="1"> | |||
public class Book | |||
{ | |||
public int Id { get; set; } | |||
public string Title { get; set; } | |||
[Unicode(false)] | |||
[MaxLength(22)] | |||
public string Isbn { get; set; } | |||
} | |||
</syntaxhighlight> | |||
| | |||
* automatikus típusmegfeleltetés | |||
* egyszerű, ismert szintaxis | |||
|- | |||
|Fluent API | |||
|<syntaxhighlight lang="csharp" line="1">protected override void OnModelCreating(ModelBuilder modelBuilder) | |||
{ | |||
modelBuilder.Entity<Book>() | |||
.Property(b => b.Isbn) | |||
.IsUnicode(false); | |||
}</syntaxhighlight> | |||
| | |||
* kapcsolatok meghatározása | |||
* nézetek és egyedi eljárások támogatása | |||
* ősfeltöltés támogatása | |||
* adatbázisspecifikus beállítások | |||
|} | |||
=== Milyen két lehetőségünk van a modell konfigurációjára? === | |||
==== Code first ==== | |||
{| class="wikitable" | |||
! | |||
!lépés | |||
!ki / mi készíti? | |||
|- | |||
|1. | |||
|OO-modell | |||
| rowspan="2" |a fejlesztő C#-ban | |||
|- | |||
|2. | |||
|ORM | |||
|- | |||
|3. | |||
|DB-objektumok | |||
|EF Core Migration Tool | |||
|} | |||
==== Database first ==== | |||
{| class="wikitable" | |||
! | |||
!lépés | |||
!ki / mi készíti? | |||
|- | |||
|1. | |||
|DB-objektumok | |||
|a fejlesztő SQL-ben | |||
|- | |||
|2. | |||
|ORM | |||
| rowspan="2" |EF Core Reverse Engineering Tool | |||
|- | |||
|3. | |||
|OO-modell | |||
|} | |||
# | |||
=== Hogy néz ki egy entitás, hogyan készítünk kapcsolatokat közöttük? === | === Hogy néz ki egy entitás, hogyan készítünk kapcsolatokat közöttük? === | ||