„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 Core ==
== 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
|}


=== Milyen három modellezési lehetőségünk van adatmodell készítésére, és milyen két lehetőségünk van a modell konfigurációjára? ===
#
...


=== 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? ===