sql >> Database teknologi >  >> RDS >> Database

Sådan arbejder du med arv i Entity Framework Core

Entity Framework Core fra Microsoft er en tværplatforms, let og fleksibel version af sin forgænger, Entity Framework. EF Core er et objekt-relationel kortlægningsværktøj (ORM), der tilbyder en standardiseret måde at gemme og hente data til og fra forskellige datakilder.

Ved at programmere mod en konceptuel snarere end en relationel model. Som følge heraf er der ingen impedansuoverensstemmelse mellem, hvordan data er repræsenteret i applikationen, og hvordan de er gemt i databasen.

Nedarvning er en funktion i objektorienteret programmering, der gør det muligt for dig at oprette underklasser fra en basisklasse og derved udvide basisklassens funktioner. Entity Framework Core giver fremragende støtte til arv. Denne artikel taler om, hvordan vi kan implementere arv i Entity Framework Core. Vi vil bruge EntityDeveloper til at tale med databasen.

Forudsætninger

For at kunne arbejde med de kodeeksempler, der er vist i denne artikel, skal du have følgende installeret på dit system:

  • Visual Studio 2019 Community Edition (download)
  • dotConnect til PostgreSQL (download)
  • Enhedsudvikler

Du kan downloade en kopi af Entity Developer (prøveversion) herfra:https://www.devart.com/entitydeveloper/download.html.

Opret en database

Nu hvor ASP.NET Core Web API-projektet er blevet oprettet i Visual Studio 2019; næste trin er at oprette databasen. Bemærk, at vi for nemheds skyld bruger en database med et par to tabeller med enkle designs i dette eksempel. Opret en database kaldet Demo og opret tre tabeller (Person, User og Manager) i den. Felterne i disse tabeller skal kortlægges med egenskaberne for de modelklasser, der vises senere i denne artikel.

Opret et nyt ASP.NET Core Web API-projekt

Forudsat at den nødvendige software er blevet installeret på din computer for at kunne arbejde med enhedsudvikleren, skal du følge trinene nedenfor for at oprette et nyt ASP.NET Core Web API-projekt.

1. Først skal du åbne Visual Studio 2019 IDE.
2. Klik derefter på Opret et nyt projekt når IDE'en er indlæst.
3. Klik på Opret et nyt projekt .
4. Vælg derefter ASP.NET Core Web Application .
5. Klik på Næste .
6. Angiv projektets navn og placering – hvor det skal gemmes i dit system.
7. Klik eventuelt på Placer løsning og projekt i samme mappe afkrydsningsfelt.
8. Klik derefter på Opret .
9. I Opret en ny ASP.NET Core Web Application dialogvindue, der vises herefter, skal du vælge API som projektskabelon.
10. Vælg ASP.NET Core 3.1 eller nyere som version.
11. Du bør deaktivere Konfigurer til HTTPS og Aktiver Docker Support muligheder ved at deaktivere de respektive afkrydsningsfelter.
12. Da vi ikke vil bruge godkendelse i dette eksempel, skal du angive godkendelse som Ingen godkendelse .
13. Klik til sidst på Opret knappen for at afslutte processen.

Opret en enhedsdatamodel

Den næste ting du skal gøre er at oprette en enhedsdatamodel. Når du opretter en model i Entity Developer, er der to muligheder at vælge imellem:Database First (dette er valgt som standard) og Model First. I dette eksempel vil vi drage fordel af Database First-tilgangen. Husk at vælge Generer fra database mulighed for at generere din model fra databasen og vælge de databaseobjekter, du ønsker skal være en del af din enhedsdatamodel.

Følg disse trin skitseret nedenfor for at oprette en enhedsdatamodel i Entity Developer ved hjælp af database-first-tilgangen.

1. Vælg dit projekt i Solution Explorer Vindue.
2. Højreklik, og vælg Tilføj>Ny vare .
3. Vælg Devart EF Core Model som skabelonen som vist nedenfor.

4. Angiv et navn til din enhedsdatamodel, og klik på Tilføj .
5. Angiv forbindelsesegenskaberne, og test forbindelsen.
6. Klik på Næste at fortsætte.
7. Som standard vil muligheden "Generer fra database" være valgt. Da vi ønsker, at modellen skal oprettes fra databasen, skal du klikke på Næste at fortsætte.
8. Fravælg alle indstillinger, og angiv derefter kun de databaseobjekter, du ønsker skal være en del af modellen. Her skal du vælge tabellerne Produkter og kategorier.
9. I Opsætning navneregler skærm, kan du valgfrit angive navngivningsregler for dine enheder.
10. På næste skærmbillede kan du valgfrit angive modelegenskaberne.
11. På næste skærmbillede kan du valgfrit vælge modeldiagrammets indhold.
12. I det næste skærmbillede kan du valgfrit angive kodegenereringsskabeloner.
13. Angiv kodegenereringsskabelonen efter eget valg.
14. Klik til sidst på Udfør for at fuldføre processen.

Din ADO.NET Entity Data Model ved hjælp af Entity Developer oprettes sammen med datakonteksten og modelklasserne.

Arv i Entity Framework Core

Entity Framework Core (EF Core) giver dig mulighed for at tilknytte et .NET-klassehierarki til en database. Derfor kan du oprette dine .NET-enheder repræsenteret som basis- og afledte typer, og EF Core kan generere databaseskemaet for dig. Men da EF Core ikke automatisk søger efter basisklasser eller afledte klasser, skal du udtrykkeligt deklarere en CLR-type på din model, hvis du vil have den kortlagt. Det skal bemærkes, at det ikke er tilstrækkeligt at angive basistypen, dvs. det vil ikke automatisk tvinge EF Core til at inkludere alle undertyper.

Den følgende kodeliste illustrerer, hvordan du kan oprette en tilpasset datakontekst for en klasse såvel som dens underklasse.

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 pr. hierarki (TPH)

I arvetypen Table Per Hierarchy (TPH) (dette er standardarvstypen i EF Core), ville du kun have én tabel for hele hierarkiet til at repræsentere alle klasserne. For at skelne mellem forskellige typer bruges en "diskriminator"-kolonne. Som standard er tabellen opkaldt efter basisklassen eller et DbSet-felt forbundet med den. Tabellens navn vil som standard være navnet på basisklassen eller dens tilsvarende DbSet-attribut.

Følgende kodestykke illustrerer, hvordan tabel pr. hierarki kan repræsenteres:

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 pr. type (TPT)

Tabel Per Type (TPT) tilgangsnedarvningsrelationer er afbildet som fremmednøgler. I denne tilgang repræsenterer en separat tabel hver type (inklusive abstrakte typer) af arvekæden. Fremmednøglerne bruges til at forbinde tabeller, der repræsenterer afledte typetyper, med deres basistype. I denne strategi opretter EF Core en basistabel i databasen og flere tabeller, der er specifikke for hver afledt type.

Følgende kodeliste viser, hvordan metoden Table Per Type (TPT) kan implementeres:

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 pr. betontype (TPC)

I TPC-metoden (Table Per Concrete Type) er hver betontype i arvekæden repræsenteret af en adskilt tabel i databasen, men ikke den abstrakte klasse. Egenskaber for enhver abstrakt basistype oprettes som felter i tabellen for hver betontype.

Klassedesignet vil være det samme som TPH. Sådan kan du angive en tabel for hver af underklasserne:

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");
        });
    }
}

Oversigt

Entity Framework Core kan udføres på enhver platform, der understøtter .NET Standard 2.1. Dette inkluderer .NET Core 3.1 såvel som .NET 5. Det vil dog ikke køre på .NET Standard 2.0, hvilket indebærer, at du begynder med EF Core 5.0, vil ikke være i stand til at udnytte EF Core med .NET Framework. God læsning!


  1. Oplysninger om informationsskema-databasen i MySQL

  2. Sikkerhedskopier/gendan SQLlite-database til Google Drev-appmappe

  3. 10 SP_EXECUTESQL Gotchas at undgå for bedre dynamisk SQL

  4. SQL Server:Find ud af standardværdien af ​​en kolonne med en forespørgsel