Entity Framework Core van Microsoft is een platformonafhankelijke, lichtgewicht en flexibele versie van zijn voorganger, Entity Framework. EF Core is een object-relationele mapper (ORM)-tool die een gestandaardiseerde manier biedt voor het opslaan en ophalen van gegevens van en naar diverse gegevensbronnen.
Door te programmeren tegen een conceptueel in plaats van een relationeel model. Als gevolg hiervan is er geen impedantiemismatch tussen hoe gegevens worden weergegeven in de toepassing en hoe deze in de database worden opgeslagen.
Overerving is een functie van Object-Oriented Programming waarmee u subklassen kunt maken van een basisklasse, waardoor de functies van de basisklasse worden uitgebreid. Entity Framework Corebiedt uitstekende ondersteuning voor overerving. Dit artikel gaat over hoe we overerving kunnen implementeren in Entity Framework Core. We maken gebruik van EntityDeveloper om met de database te praten.
Vereisten
Om te kunnen werken met de codevoorbeelden die in dit artikel worden gedemonstreerd, moet u het volgende op uw systeem hebben geïnstalleerd:
- Visual Studio 2019 Community-editie (download)
- dotConnect voor PostgreSQL (download)
- Entiteitsontwikkelaar
U kunt een kopie van Entity Developer (proefversie) hier downloaden:https://www.devart.com/entitydeveloper/download.html.
Een database maken
Nu het ASP.NET Core Web API-project is gemaakt in Visual Studio 2019; de volgende stap is het maken van de database. Merk op dat we omwille van de eenvoud een database gebruiken met een paar twee tabellen met eenvoudige ontwerpen in dit voorbeeld. Maak een database met de naam Demo en maak daarin drie tabellen (Persoon, Gebruiker en Manager). De velden in deze tabellen moeten overeenkomen met de eigenschappen van de modelklassen die verderop in dit artikel worden getoond.
Maak een nieuw ASP.NET Core Web API-project
Ervan uitgaande dat de benodigde software op uw computer is geïnstalleerd om met de Entity Developer te kunnen werken, volgt u de onderstaande stappen om een nieuw ASP.NET Core Web API-project te maken.
1. Open eerst de Visual Studio 2019 IDE.
2. Klik vervolgens op Een nieuw project maken zodra de IDE is geladen.
3. Klik op Een nieuw project maken .
4. Selecteer vervolgens ASP.NET Core-webtoepassing .
5. Klik op Volgende .
6. Specificeer de projectnaam en locatie - waar het in uw systeem moet worden opgeslagen.
7. Klik eventueel op Plaats oplossing en project in dezelfde map selectievakje.
8. Klik vervolgens op Maken .
9. In de Een nieuwe ASP.NET Core-webtoepassing maken dialoogvenster dat hierna wordt weergegeven, selecteert u API als de projectsjabloon.
10. Selecteer ASP.NET Core 3.1 of hoger als versie.
11. U moet de Configureren voor HTTPS . uitschakelen en Schakel Docker-ondersteuning in opties door de respectievelijke selectievakjes uit te schakelen.
12. Aangezien we in dit voorbeeld geen authenticatie gebruiken, specificeert u authenticatie als Geen authenticatie .
13. Klik ten slotte op de Maken knop om het proces te beëindigen.
Maak een entiteitsgegevensmodel
Het volgende dat u moet doen, is een entiteitsgegevensmodel maken. Wanneer u een model maakt in Entity Developer, kunt u uit twee opties kiezen:Database First (dit is standaard geselecteerd) en Model First. In dit voorbeeld maken we gebruik van de Database First-aanpak. Vergeet niet om Genereren uit database . te selecteren optie om uw model uit de database te genereren en de databaseobjecten te selecteren die u in uw entiteitsgegevensmodel wilt opnemen.
Volg de onderstaande stappen om een entiteitsgegevensmodel te maken in Entity Developer met behulp van de database-first-benadering.
1. Selecteer uw project in de Solution Explorer Raam.
2. Klik met de rechtermuisknop en selecteer Toevoegen>Nieuw item .
3. Selecteer Devart EF-kernmodel als de sjabloon zoals hieronder weergegeven.
4. Geef een naam op voor uw entiteitsgegevensmodel en klik op Toevoegen .
5. Geef de verbindingseigenschappen op en test de verbinding.
6. Klik op Volgende doorgaan.
7. Standaard is de optie “Genereren uit database” geselecteerd. Omdat we willen dat het model vanuit de database wordt gemaakt, klikt u op Volgende doorgaan.
8. Schakel alle opties uit en geef vervolgens alleen de database-objecten op die u in het model wilt opnemen. Hier moet u de tabellen Producten en Categorieën selecteren.
9. In de Setup naamgevingsregels scherm, kunt u optioneel naamgevingsregels voor uw entiteiten specificeren.
10. In het volgende scherm kunt u eventueel de modeleigenschappen specificeren.
11. In het volgende scherm kunt u optioneel de inhoud van het modeldiagram kiezen.
12. In het volgende scherm kunt u optioneel codegeneratiesjablonen specificeren.
13. Specificeer het codegeneratiesjabloon van uw keuze.
14. Klik ten slotte op Voltooien om het proces te voltooien.
Uw ADO.NET Entity Data Model met Entity Developer wordt samen met de datacontext en modelklassen gemaakt.
Overerving in Entity Framework Core
Met Entity Framework Core (EF Core) kunt u een .NET-klassehiërarchie toewijzen aan een database. Daarom kunt u uw .NET-entiteiten maken die worden weergegeven als de basis- en afgeleide typen, en EF Core kan het databaseschema voor u genereren. Omdat EF Core echter niet automatisch naar basisklassen of afgeleide klassen zoekt, moet je expliciet een CLR-type op je model declareren als je wilt dat het wordt toegewezen. Opgemerkt moet worden dat het specificeren van alleen het basistype niet voldoende is, d.w.z. het zal EF Core niet automatisch dwingen om alle subtypes op te nemen.
De volgende codelijst illustreert hoe u een aangepaste gegevenscontext kunt maken voor zowel een klasse als zijn subklasse.
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; }
}
Tabel per hiërarchie (TPH)
In het overervingstype Tabel per hiërarchie (TPH) (dit is het standaardoverervingstype in EF Core), zou u slechts één tabel hebben voor de hele hiërarchie om alle klassen weer te geven. Om onderscheid te maken tussen verschillende typen, wordt een kolom 'discriminator' gebruikt. Standaard is de tabel genoemd naar de basisklasse of een DbSet-veld dat eraan is gekoppeld. De naam van de tabel is standaard de naam van de basisklasse of het bijbehorende DbSet-attribuut.
Het volgende codefragment illustreert hoe tabel per hiërarchie kan worden weergegeven:
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; }
}
Tabel per type (TPT)
Tabel Per Type (TPT) benadering overervingsrelaties worden weergegeven als externe sleutels. In deze benadering vertegenwoordigt een afzonderlijke tabel elk type (inclusief abstracte typen) van de overervingsketen. De refererende sleutels worden gebruikt om tabellen die afgeleide typen vertegenwoordigen te koppelen aan hun basistype. In deze strategie creëert EF Core een basistabel in de database en meerdere tabellen die specifiek zijn voor elk afgeleid type.
De volgende codelijst laat zien hoe de Table Per Type (TPT)-benadering kan worden geïmplementeerd:
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; }
}
Tabel per betontype (TPC)
In de Table Per Concrete Type (TPC)-benadering wordt elk betontype in de overervingsketen weergegeven door een aparte tabel in de database, maar niet door de abstracte klasse. Eigenschappen van elk abstract basistype worden gemaakt als velden in de tabel van elk betontype.
Het klasseontwerp zal hetzelfde zijn als TPH. Zo kunt u een tabel specificeren voor elk van de subklassen:
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");
});
}
}
Samenvatting
Entity Framework Core kan worden uitgevoerd op elk platform dat .NET Standard 2.1 ondersteunt. Dit omvat zowel .NET Core 3.1 als .NET 5. Het wordt echter niet uitgevoerd op .NET Standard 2.0, wat inhoudt dat u vanaf EF Core 5.0 niet in staat zult zijn EF Core te gebruiken met .NET Framework. Veel leesplezier!