Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Entity Framework (EF) Core is een lichtgewicht, uitbreidbare, opensource - en platformoverschrijdende versie van de populaire Entity Framework-technologie voor gegevenstoegang.
EF Core kan fungeren als een object-relationele mapper (O/RM), die:
- Hiermee kunnen .NET-ontwikkelaars met een database werken met behulp van .NET-objecten.
- Elimineert de noodzaak van de meeste code voor gegevenstoegang die doorgaans moet worden geschreven.
EF Core ondersteunt veel database-engines, zie Databaseproviders voor meer informatie.
Het model
Met EF Core wordt gegevenstoegang uitgevoerd met behulp van een model. Een model bestaat uit entiteitsklassen en een contextobject dat een sessie met de database vertegenwoordigt. Met het contextobject kunt u gegevens opvragen en opslaan. Zie Een model maken voor meer informatie.
EF ondersteunt de volgende modelontwikkelingsmethoden:
- Genereer een model op basis van een bestaande database.
- Codeer een model met de hand dat overeenkomt met de database.
- Zodra een model is gemaakt, gebruikt u EF Migrations om een database te maken op basis van het model. Migraties maken het mogelijk om de database te ontwikkelen naarmate het model verandert.
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
namespace Intro;
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(
@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0");
}
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public int Rating { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
Querying
Exemplaren van uw entiteitsklassen worden opgehaald uit de database met behulp van LINQ (Language Integrated Query). Zie Query's uitvoeren op gegevens voor meer informatie.
using (var db = new BloggingContext())
{
var blogs = await db.Blogs
.Where(b => b.Rating > 3)
.OrderBy(b => b.Url)
.ToListAsync();
}
Gegevens opslaan
Gegevens worden gemaakt, verwijderd en gewijzigd in de database met behulp van exemplaren van uw entiteitsklassen. Zie Opslaan van gegevens voor meer informatie.
using (var db = new BloggingContext())
{
var blog = new Blog { Url = "http://sample.com" };
db.Blogs.Add(blog);
await db.SaveChangesAsync();
}
Overwegingen voor EF O/RM
Ef Core is goed bij het abstraheren van veel programmeerdetails, maar er zijn enkele best practices die van toepassing zijn op elke O/RM die helpen veelvoorkomende valkuilen in productie-apps te voorkomen:
- Kennis op tussenliggend niveau of hoger van de onderliggende databaseserver is essentieel voor het ontwerpen, opsporen, profilen en migreren van gegevens in productie-apps met hoge prestaties. Bijvoorbeeld kennis van primaire en refererende sleutels, beperkingen, indexen, normalisatie, DML- en DDL-instructies, gegevenstypen, profilering, enzovoort.
- Functionele en integratietests: het is belangrijk om de productieomgeving zo dicht mogelijk te repliceren voor:
- Zoek problemen in de app die alleen worden weergegeven wanneer u een specifieke versie of editie van de databaseserver gebruikt.
- Detecteer ingrijpende wijzigingen bij het upgraden van EF Core en andere afhankelijkheden. U kunt bijvoorbeeld frameworks zoals ASP.NET Core, OData of AutoMapper toevoegen of upgraden. Deze afhankelijkheden kunnen op onverwachte manieren van invloed zijn op EF Core.
- Prestaties en stresstests met representatieve belastingen. Het naïef gebruik van sommige functies kan niet goed worden geschaald. Meerdere verzamelingen omvatten bijvoorbeeld, intensief gebruik van luie laadbewerkingen, voorwaardelijke query's op niet-geïndexeerde kolommen, enorme updates en invoegingen met opgeslagen waarden, gebrek aan gelijktijdigheidsafhandeling, grote modellen, onvoldoende cachebeleid.
- Beveiligingsbeoordeling: Bijvoorbeeld het verwerken van verbindingsreeksen en andere geheimen, databasemachtigingen voor bewerkingen die niet worden uitgevoerd, invoervalidatie voor onbewerkte SQL, versleuteling voor gevoelige gegevens. Zie Beveiligde verificatiestromen voor beveiligde configuratie- en verificatiestroom.
- Zorg ervoor dat logboekregistratie en diagnostische gegevens voldoende en bruikbaar zijn. Bijvoorbeeld de juiste configuratie van logboekregistratie, querytags en Application Insights.
- Herstellen van fouten. Bereid onvoorziene situaties voor voor veelvoorkomende foutscenario's, zoals het terugdraaien van versies, terugvalservers, uitschalen en taakverdeling, DoS-beperking en gegevensback-ups.
- Implementatie en migratie van toepassingen. Plan uit hoe migraties worden toegepast tijdens de implementatie; als u dit doet bij het starten van de toepassing, kan dit leiden tot gelijktijdigheidsproblemen en zijn hogere machtigingen vereist dan nodig is voor normale werking. Gebruik fasering om het herstel van fatale fouten tijdens de migratie te vergemakkelijken. Zie Migraties toepassen voor meer informatie.
- Gedetailleerd onderzoek en testen van gegenereerde migraties. Migraties moeten grondig worden getest voordat ze worden toegepast op productiegegevens. De vorm van het schema en de kolomtypen kunnen niet eenvoudig worden gewijzigd zodra de tabellen productiegegevens bevatten. Op SQL Server
nvarchar(max)decimal(18, 2)zijn bijvoorbeeld zelden de beste typen voor kolommen die zijn toegewezen aan tekenreeks- en decimale eigenschappen, maar dit zijn de standaardinstellingen die EF gebruikt omdat deze geen kennis van uw specifieke scenario heeft.
Volgende stappen
Zie Aan de slag met Entity Framework Core voor introductiezelfstudies.