Entity Framework Core od společnosti Microsoft je multiplatformní, odlehčená a flexibilní verze svého předchůdce Entity Framework. EF Core je objektově-relační mapovací nástroj (ORM), který nabízí standardizovaný způsob ukládání a získávání dat do az různých zdrojů dat.
Programováním proti konceptuálnímu spíše než relačnímu modelu. V důsledku toho neexistuje žádný nesoulad impedance mezi tím, jak jsou data reprezentována v aplikaci a jak jsou uložena v databázi.
Dědičnost je funkce objektově orientovaného programování, která vám umožňuje vytvářet podtřídy ze základní třídy, čímž rozšiřuje funkce základní třídy. Entity Framework CorePoskytuje vynikající podporu pro dědičnost. Tento článek pojednává o tom, jak můžeme implementovat dědičnost v Entity Framework Core. Pro komunikaci s databází využijeme EntityDeveloper.
Předpoklady
Abyste mohli pracovat s příklady kódu ukázanými v tomto článku, měli byste mít v systému nainstalováno následující:
- Visual Studio 2019 Community Edition (stáhnout)
- dotConnect pro PostgreSQL (stažení)
- Vývojář entity
Kopii Entity Developer (zkušební verze) si můžete stáhnout zde:https://www.devart.com/entitydeveloper/download.html.
Vytvořit databázi
Nyní, když byl ve Visual Studiu 2019 vytvořen projekt ASP.NET Core Web API; dalším krokem je vytvoření databáze. Všimněte si, že pro jednoduchost v tomto příkladu použijeme databázi s několika dvěma tabulkami s jednoduchým designem. Vytvořte databázi s názvem Demo a vytvořte v ní tři tabulky (Osoba, Uživatel a Správce). Pole v těchto tabulkách by měla mapovat s vlastnostmi tříd modelu uvedených dále v tomto článku.
Vytvořte nový projekt ASP.NET Core Web API
Za předpokladu, že byl do vašeho počítače nainstalován potřebný software, abyste mohli pracovat s Entity Developer, vytvořte nový projekt ASP.NET Core Web API podle níže uvedených kroků.
1. Nejprve otevřete Visual Studio 2019 IDE.
2. Dále klikněte na Vytvořit nový projekt po načtení IDE.
3. Klikněte na Vytvořit nový projekt .
4. Dále vyberte ASP.NET Core Web Application .
5. Klikněte na Další .
6. Zadejte název projektu a umístění – kde by měl být ve vašem systému uložen.
7. Volitelně klikněte na Umístit řešení a projekt do stejného adresáře zaškrtávací políčko.
8. Dále klikněte na Vytvořit .
9. V části Vytvořit novou webovou aplikaci ASP.NET Core dialogovém okně, které se zobrazí dále, vyberte API jako šablonu projektu.
10. Jako verzi vyberte ASP.NET Core 3.1 nebo novější.
11. Měli byste zakázat Konfigurovat pro HTTPS a Povolit podporu Docker možnosti deaktivací příslušných zaškrtávacích políček.
12. Protože v tomto příkladu nepoužijeme ověřování, zadejte ověření jako Žádné ověření .
13. Nakonec klikněte na Vytvořit dokončete proces.
Vytvořte datový model entity
Další věc, kterou byste měli udělat, je vytvořit datový model entity. Když vytváříte model v Entity Developer, máte na výběr ze dvou možností:Database First (tato možnost je vybrána ve výchozím nastavení) a Model First. V tomto příkladu využijeme přístup Database First. Nezapomeňte vybrat možnost Generovat z databáze možnost vygenerovat model z databáze a vybrat databázové objekty, které chcete, aby byly součástí vašeho datového modelu entity.
Chcete-li vytvořit datový model entity v Entity Developer pomocí přístupu založeného na databázi, postupujte podle následujících kroků uvedených níže.
1. Vyberte svůj projekt v Průzkumníku řešení Okno.
2. Klikněte pravým tlačítkem myši a vyberte možnost Přidat>Nová položka .
3. Vyberte Devart EF Core Model jako šablonu, jak je uvedeno níže.
4. Zadejte název datového modelu entity a klikněte na Přidat .
5. Zadejte vlastnosti připojení a otestujte připojení.
6. Klikněte na Další pokračovat.
7. Ve výchozím nastavení bude vybrána možnost „Generovat z databáze“. Protože chceme, aby byl model vytvořen z databáze, klikněte na Další pokračovat.
8. Zrušte výběr všech možností a poté zadejte pouze databázové objekty, které chcete, aby byly součástí modelu. Zde byste měli vybrat tabulky produktů a kategorií.
9. V Nastavení pravidla pojmenování můžete volitelně zadat pravidla pro pojmenování pro své entity.
10. Na další obrazovce můžete volitelně specifikovat vlastnosti modelu.
11. Na další obrazovce můžete volitelně zvolit obsah modelového diagramu.
12. Na další obrazovce můžete volitelně zadat šablony pro generování kódu.
13. Určete šablonu generování kódu podle vašeho výběru.
14. Nakonec klikněte na Dokončit k dokončení procesu.
Váš datový model ADO.NET Entity pomocí Entity Developer bude vytvořen spolu s datovým kontextem a třídami modelu.
Dědičnost v jádru Entity Framework
Entity Framework Core (EF Core) umožňuje mapovat hierarchii tříd .NET na databázi. Můžete tedy vytvářet své entity .NET reprezentované jako základní a odvozené typy a EF Core vám může vygenerovat schéma databáze. Protože však EF Core automaticky nevyhledává základní nebo odvozené třídy, musíte na svém modelu explicitně deklarovat typ CLR, pokud chcete, aby byl mapován. Je třeba poznamenat, že určení pouze základního typu nebude stačit, to znamená, že nebude automaticky nuceno EF Core zahrnout všechny podtypy.
Následující výpis kódu ukazuje, jak můžete vytvořit vlastní datový kontext pro třídu i její podtřídu.
public class DemoDbContext : DbContext {
public DbSet<Person> Person { get; set; }
public DbSet<Author> Authors { get; set; }
}
public class Person {
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Author : Person {
public string SubjectArea { get; set; }
}
Tabulka podle hierarchie (TPH)
V typu dědičnosti Table Per Hierarchy (TPH) (toto je výchozí typ dědičnosti v EF Core) byste měli pouze jednu tabulku pro celou hierarchii, která by reprezentovala všechny třídy. Pro rozlišení různých typů se používá sloupec „diskriminátor“. Ve výchozím nastavení je tabulka pojmenována podle základní třídy nebo pole DbSet, které je s ní spojeno. Název tabulky by ve výchozím nastavení byl název základní třídy nebo její odpovídající atribut DbSet.
Následující fragment kódu ilustruje, jak může být znázorněna tabulka podle hierarchie:
public abstract class Person {
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class User : Person {
public string UserName { get; set; }
public string Password { get; set; }
}
public class Manager : Person {
public string Department { get; set; }
}
Tabulka podle typu (TPT)
Vztahy dědičnosti přístupu tabulky podle typu (TPT) jsou znázorněny jako cizí klíče. V tomto přístupu představuje samostatná tabulka každý typ (včetně abstraktních typů) řetězce dědičnosti. Cizí klíče se používají k propojení tabulek, které představují odvozené typy typů, s jejich základním typem. V této strategii EF Core vytvoří základní tabulku v databázi a několik tabulek specifických pro každý odvozený typ.
Následující výpis kódu ukazuje, jak lze implementovat přístup tabulky podle typu (TPT):
public abstract class Person {
public int Id { get; set; }
public string FullName { get; set; }
}
[Table("Users")]
public class User : Person {
public string UserName { get; set; }
public string Password { get; set; }
}
[Table("Managers")]
public class Manager : Person {
public string Department { get; set; }
}
Tabulka podle typu betonu (TPC)
V přístupu Tabulka podle typu betonu (TPC) je každý konkrétní typ v řetězci dědičnosti reprezentován odlišnou tabulkou v databázi, ale nikoli abstraktní třídou. Vlastnosti libovolného základního typu abstraktní jsou vytvořeny jako pole v tabulce každého konkrétního typu.
Design třídy bude stejný jako u TPH. Zde je návod, jak můžete určit tabulku pro každou z podtříd:
public class MyDbContext : DbContext {
public DbSet<Person> Person { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity<User>().Map(m => {
m.MapInheritedProperties();
m.ToTable("Users");
});
modelBuilder.Entity<Author>().Map(m => {
m.MapInheritedProperties();
m.ToTable("Managers");
});
}
}
Shrnutí
Entity Framework Core lze spustit na jakékoli platformě, která podporuje .NET Standard 2.1. To zahrnuje .NET Core 3.1 i .NET 5. Nespustí se však na .NET Standard 2.0, což znamená, že počínaje EF Core 5.0 nebudete moci využívat EF Core s .NET Framework. Příjemné čtení!