<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Entity_Framework</id>
	<title>Entity Framework - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Entity_Framework"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Entity_Framework&amp;action=history"/>
	<updated>2026-05-22T06:09:44Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Entity_Framework&amp;diff=2801815&amp;oldid=prev</id>
		<title>imported&gt;INOUIW: /* growthexperiments-addlink-summary-summary:1|0|0 */</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Entity_Framework&amp;diff=2801815&amp;oldid=prev"/>
		<updated>2025-06-07T14:26:19Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;growthexperiments-addlink-summary-summary:1|0|0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox Software&lt;br /&gt;
|Name                  = ADO.NET Entity Framework&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;(bis ca. 2012)&amp;lt;/small&amp;gt;,&amp;lt;br /&amp;gt;Entity Framework&lt;br /&gt;
|Logo                  = &lt;br /&gt;
|Screenshot            = &amp;lt;!-- Bildschirmfoto --&amp;gt;&lt;br /&gt;
|Beschreibung          = &amp;lt;!-- Beschreibung des Bildschirmfotos --&amp;gt;&lt;br /&gt;
|Maintainer            = [[GitHub]]&lt;br /&gt;
|Hersteller            = [[Microsoft]] &amp;lt;small&amp;gt;(ursprünglich)&amp;lt;/small&amp;gt;&lt;br /&gt;
|Erscheinungsjahr      = 2008&lt;br /&gt;
|AktuelleVersion       = 6.4.4&lt;br /&gt;
|AktuelleVersionFreigabeDatum = 15. Mai 2020&lt;br /&gt;
|AktuelleVorabVersion  = &lt;br /&gt;
|AktuelleVorabVersionFreigabeDatum = &lt;br /&gt;
|Betriebssystem        = &lt;br /&gt;
|Programmiersprache    = &lt;br /&gt;
|Kategorie             = [[Objektrelationale Abbildung|ORM]]-Framework&lt;br /&gt;
|Lizenz                = [[Apache-Lizenz|Apache 2.0]]&lt;br /&gt;
|Deutsch               = &lt;br /&gt;
|Sonstiges             = &lt;br /&gt;
|Website               = [https://github.com/dotnet/ef6 EF auf GitHub]&lt;br /&gt;
|Dateien               = &lt;br /&gt;
}}&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
| Name                 = Entity Framework Core&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;auch:&amp;lt;/small&amp;gt; EF Core&lt;br /&gt;
| Logo                 = &lt;br /&gt;
| Screenshot           = &amp;lt;!-- Bildschirmfoto --&amp;gt;&lt;br /&gt;
| Beschreibung         = &amp;lt;!-- Beschreibung des Bildschirmfotos --&amp;gt;&lt;br /&gt;
| Maintainer           = [[GitHub]]&lt;br /&gt;
| Hersteller           = &lt;br /&gt;
| Erscheinungsjahr     = 2016&lt;br /&gt;
| AktuelleVersion      = 6.0.8&amp;lt;ref name=&amp;quot;currentVersion&amp;quot;&amp;gt;[https://github.com/dotnet/efcore/releases Releases], in: [[GitHub]], abgerufen am 30. Aug. 2022&amp;lt;/ref&amp;gt;&lt;br /&gt;
| AktuelleVersionFreigabeDatum = August 2022&lt;br /&gt;
| AktuelleVorabVersion = 7.0 Preview 7&amp;lt;ref name=&amp;quot;currentVersion&amp;quot; /&amp;gt;&lt;br /&gt;
| AktuelleVorabVersionFreigabeDatum = August 2022&lt;br /&gt;
| Betriebssystem       = &lt;br /&gt;
| Programmiersprache   = &lt;br /&gt;
| Kategorie            = [[Objektrelationale Abbildung|ORM]]-Framework&lt;br /&gt;
| Lizenz               = [[Apache-Lizenz|Apache 2.0]]&lt;br /&gt;
| Deutsch              = &lt;br /&gt;
| Website              = [https://github.com/dotnet/efcore EF Core auf GitHub]&lt;br /&gt;
| Sonstiges            = &lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Entity Framework&amp;#039;&amp;#039;&amp;#039;, kurz auch &amp;#039;&amp;#039;&amp;#039;EF&amp;#039;&amp;#039;&amp;#039;, ist ein [[Framework]] für [[objektrelationale Abbildung]] (ORM). Es wurde von [[Microsoft]] entwickelt und dient dem ORM auf [[.Net-Framework]]- sowie auf [[.NET (Plattform)|.NET]]-Objektstrukturen. Seine erste finale Version erschien als Teil des .NET Framework 3.5 ([[Service Pack]] 1) im Jahr 2008. Damals trug es den Namen &amp;#039;&amp;#039;&amp;#039;ADO.NET Entity Framework&amp;#039;&amp;#039;&amp;#039;. Für die folgende Version, die die Nummer 4.0 trägt und 2010 als Teil des .NET Framework 4.0 erschien, wurde das Framework deutlich erweitert. Ab der Version 4.1 wird das Entity Framework unabhängig von der Entwicklung des .NET Frameworks fortgeführt. Etwa seit dem Jahr 2012, in dem die Version 5.0 erschien und Microsoft das Framework [[quelloffen]] verfügbar machte, heißt es &amp;#039;&amp;#039;Entity Framework&amp;#039;&amp;#039;. Ab der Version 6.0, die 2013 erschien, gehört das Framework nicht mehr zum .NET Framework.&amp;lt;ref&amp;gt;Holger Schwichtenberg: [https://www.heise.de/newsticker/meldung/Microsoft-stellt-OR-Mapper-von-NET-quelloffen-zur-Verfuegung-1647266.html &amp;#039;&amp;#039;Microsoft stellt OR-Mapper von .NET quelloffen zur Verfügung&amp;#039;&amp;#039;], in: [[heise online]] vom 19. Juli 2012, abgerufen am 7. Dez. 2015.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Holger Schwichtenberg: [https://www.heise.de/newsticker/meldung/Asynchrone-Datenbankzugriffe-mit-Microsofts-Entity-Framework-6-0-1981569.html &amp;#039;&amp;#039;Asynchrone Datenbankzugriffe mit Microsofts Entity Framework 6.0&amp;#039;&amp;#039;], in: [[heise online]] vom 18. Okt. 2013, abgerufen am 7. Dez. 2015.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einhergehend mit [[.NET Core]] gibt es seit 2016 das separate Framework &amp;#039;&amp;#039;&amp;#039;Entity Framework Core&amp;#039;&amp;#039;&amp;#039;, das auch &amp;#039;&amp;#039;&amp;#039;EF Core&amp;#039;&amp;#039;&amp;#039; genannt wird. Seit der .NET Core Version 3 ist dieses ein Zusatzpaket und nicht mehr automatisch Bestandteil von .NET Core.&amp;lt;ref&amp;gt;{{Internetquelle |url=https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-3-1-and-entity-framework-6-4/ |titel=Announcing Entity Framework Core 3.1 and Entity Framework 6.4 – .NET Blog |abruf=2019-12-07}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modellieransätze ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Entity Framework Modellieransätze&lt;br /&gt;
! &amp;amp;nbsp; !! Code First !! Model First&lt;br /&gt;
|-&lt;br /&gt;
! Keine Datenbank vorhanden&lt;br /&gt;
| Bestehende [[Klasse (Objektorientierung)|Klassen]] werden mit [[Annotation (Programmierung)|Annotationen]] (&amp;lt;code&amp;gt;Table&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Column&amp;lt;/code&amp;gt;) ausgezeichnet, welche die Abbildung auf eine Datenbank steuern. Darauf aufbauend werden vom DbContext die Datenbank und die Datenbank-Tabellen modelliert und beim Aufruf der &amp;lt;code&amp;gt;SaveChanges()&amp;lt;/code&amp;gt;-Methode erstellt.&lt;br /&gt;
| Die Entity-Klassen werden mit einem grafischen Designer modelliert. Das Modell wird einerseits mit Hilfe des &amp;#039;&amp;#039;{{lang|en|Text Template Transformation Toolkit}}&amp;#039;&amp;#039; (T4) und der zugehörigen T4-Skriptsprache in Entity-Klassen umgewandelt. Zudem erlaubt es der Designer, ein SQL-Skript zu erstellen, mit dem die Datenbank erstellt wird.&lt;br /&gt;
|-&lt;br /&gt;
! Verwendung einer bestehenden Datenbank&lt;br /&gt;
| Die Entity-Klassen können entsprechend der vorgegebenen Datenbank manuell erstellt, modelliert und ausgezeichnet werden. Dies ist jedoch sehr arbeitsintensiv.&lt;br /&gt;
| Mit Hilfe eines Assistenten wird die Datenbank abgefragt und entsprechend der Datenbankstruktur ein passendes Modell erstellt. Dieses wird mit einem T4-Skript in die entsprechenden Klassen umgewandelt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Architektur ==&lt;br /&gt;
[[Datei:ADO.NET EF.svg|400px|mini|Prinzipielle Funktionsweise des ADO.NET Entity Framework]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Überblick über wichtige ADO.NET Entity Framework Objekte&lt;br /&gt;
! DbContext API&amp;lt;ref group=&amp;quot;EF4&amp;quot;&amp;gt;Während das EF5 standardmäßig die Db-Klassen verwendet, wird im EF4 ein entsprechendes T4-Template (EF4.x DbContext Generator) benötigt.&amp;lt;/ref&amp;gt; (EF5) !! EF4 !! Aufgabe&lt;br /&gt;
|-&lt;br /&gt;
| DbContext || ObjectContext || Stellt eine Verbindung mit der Datenbank dar. Stellt Methoden für Abfragen ({{lang|en|Query}}), Änderungsverfolgung ({{lang|en|Tracking}}) und Speichern ({{lang|en|Save}}) bereit.&lt;br /&gt;
|-&lt;br /&gt;
| DbQuery || ObjectQuery || Stellt Methoden für das Hinzufügen ({{lang|en|Add}}), Anhängen ({{lang|en|Attach}}) und Entfernen ({{lang|en|Remove}}) von Entitäten bereit.&lt;br /&gt;
|-&lt;br /&gt;
| DbSet || ObjectSet || Erbt von DbQuery/ObjectQuery und stellt die entsprechenden Methoden für Entity-Typen bereit.&lt;br /&gt;
|-&lt;br /&gt;
| Change Tracker API || ObjectContext.ObjectStateManager || Bietet Methoden, um Änderungen verfolgen zu können. Hierzu gehört das Abfragen des ursprünglichen und des derzeitigen Zustands von Entitäten.&lt;br /&gt;
|-&lt;br /&gt;
| Validation API || — || Automatische Validierung der Daten im DataLayer.&lt;br /&gt;
|-&lt;br /&gt;
| Code First Model Building || — || [[Reflexion (Programmierung)|Reflektiert]] über [[Quelltext|Code]]-basierte Klassen, um für diese passende [[Datenbankobjekt]]e und die zugehörigen Metadaten im [[Arbeitsspeicher]] und der Datenbank zu erstellen.&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|&lt;br /&gt;
&amp;lt;references group=&amp;quot;EF4&amp;quot; /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
=== Erstellen eines Mappings mit CodeFirst ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public class MyDbEntities : DbContext&lt;br /&gt;
{&lt;br /&gt;
   public IDbSet&amp;lt;Person&amp;gt; Persons { get; set; }&lt;br /&gt;
&lt;br /&gt;
   // Fluent Configurations&lt;br /&gt;
   protected override void OnModelCreating(DbModelBuilder modelBuilder)&lt;br /&gt;
   {&lt;br /&gt;
      modelBuilder.Entity&amp;lt;Person&amp;gt;().ToTable(&amp;quot;People&amp;quot;);&lt;br /&gt;
      modelBuilder.Entity&amp;lt;Person&amp;gt;().Property(p =&amp;gt; p.FirstName).IsRequired();&lt;br /&gt;
      // ...&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[Table(&amp;quot;People&amp;quot;)]&lt;br /&gt;
public class Person&lt;br /&gt;
{&lt;br /&gt;
   [Key]&lt;br /&gt;
   [Column(&amp;quot;PersonId&amp;quot;)]&lt;br /&gt;
   public int Id { get; set; }&lt;br /&gt;
&lt;br /&gt;
   [Required]&lt;br /&gt;
   [MaxLength(255)]&lt;br /&gt;
   public string FirstName { get; set; }&lt;br /&gt;
&lt;br /&gt;
   [Required]&lt;br /&gt;
   [MaxLength(255)]&lt;br /&gt;
   public string LastName { get; set; }&lt;br /&gt;
&lt;br /&gt;
   // ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Datenbank-Initialisierung ===&lt;br /&gt;
Die Datenbank wird im Entity Framework durch einen Initializer angelegt. Dieser wird ausgeführt, wenn das erste Entity dem Datenbankkontext hinzugefügt wird.&amp;lt;ref&amp;gt;{{Internetquelle |autor=Bipin Joshi |url=http://www.codeguru.com/csharp/article.php/c19999/Understanding-Database-Initializers-in-Entity-Framework-Code-First.htm |titel=Understanding Database Initializers in Entity Framework Code First |datum=2012-02-10 |sprache=en |abruf=2014-06-10}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
// setze Initialisierer&lt;br /&gt;
Database.SetInitializer(new DropCreateDatabaseAlways&amp;lt;MyDbEntities&amp;gt;());&lt;br /&gt;
&lt;br /&gt;
using (var context = new MyDbEntities())&lt;br /&gt;
{&lt;br /&gt;
    var person = new Person() {&lt;br /&gt;
        FirstName = &amp;quot;William&amp;quot;,&lt;br /&gt;
        LastName = &amp;quot;Adama&amp;quot;,&lt;br /&gt;
        DateOfBirth = DateTime.Now&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
   context.Persons.Add(person); // Datenbank-Initialisierer wird ausgeführt&lt;br /&gt;
   context.SaveChanges();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In ASP.NET MVC Projekten kann das &amp;lt;code&amp;gt;InitializeSimpleMembership&amp;lt;/code&amp;gt;-Attribut eingesetzt werden, um eine Initialisierung der Datenbank zu gewährleisten.&amp;lt;ref&amp;gt;{{Internetquelle |autor=Rick Anderson |url=http://blogs.msdn.com/b/rickandy/archive/2012/08/15/initializesimplemembership-attribute-and-simplemembership-exceptions.aspx |titel=InitializeSimpleMembership Attribute and SimpleMembership Exceptions |werk=MSDN Blog |hrsg=Microsoft |datum=2012-08-15 |sprache=en |abruf=2014-06-10}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hinzufügen von Entities ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
using (var context = new MyDbEntities())&lt;br /&gt;
{&lt;br /&gt;
    // Erstelle zwei Personen-Entities&lt;br /&gt;
    var person1 = new Person() {&lt;br /&gt;
        FirstName = &amp;quot;William&amp;quot;,&lt;br /&gt;
        LastName = &amp;quot;Adama&amp;quot;,&lt;br /&gt;
        DateOfBirth = DateTime.Now&lt;br /&gt;
    };&lt;br /&gt;
    var person2 = new Person() {&lt;br /&gt;
        FirstName = &amp;quot;Laura&amp;quot;,&lt;br /&gt;
        LastName = &amp;quot;Roslin&amp;quot;,&lt;br /&gt;
        DateOfBirth = DateTime.Now&lt;br /&gt;
    };&lt;br /&gt;
    // Erstelle ein Adressen-Entity&lt;br /&gt;
    var address = new Address() {&lt;br /&gt;
        Street = &amp;quot;Market Street 70&amp;quot;,&lt;br /&gt;
        City = &amp;quot;Philadelphia&amp;quot;,&lt;br /&gt;
        State = &amp;quot;PA&amp;quot;,&lt;br /&gt;
        Zip = &amp;quot;12345&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Erste Variante&lt;br /&gt;
    context.Persons.Add(person1);&lt;br /&gt;
&lt;br /&gt;
    // Zweite Variante&lt;br /&gt;
    // mit dem Kontext verlinken und als hinzugefügt markieren.&lt;br /&gt;
    context.Entry(person2).State = EntityState.Added;&lt;br /&gt;
&lt;br /&gt;
    // Dritte Variante&lt;br /&gt;
    // Das Entity wird an ein bereits vom Kontext beobachtetes Entity gehängt&lt;br /&gt;
    person1.Address.Add(address);&lt;br /&gt;
&lt;br /&gt;
    // Speichere Änderungen am Kontext in der Datenbank&lt;br /&gt;
    context.SaveChanges();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Abfrage von Daten ===&lt;br /&gt;
Abfragen aller Daten aus einem Datensatz:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
using (var context = new MyDbEntities())&lt;br /&gt;
{&lt;br /&gt;
    foreach (var person in context.Persons) // entspricht SELECT * FROM [Persons]&lt;br /&gt;
    {&lt;br /&gt;
       // führt zusätzliche SQL-Abfragen an die Adresses-Tabelle&lt;br /&gt;
       // mit einem entsprechenden JOIN aus&lt;br /&gt;
       foreach (var address in person.Adresses)&lt;br /&gt;
       {&lt;br /&gt;
           // ...&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um zu verhindern, dass dieselbe Datenbankabfrage mehrfach ausgeführt wird, kann die &amp;lt;code&amp;gt;ToList()&amp;lt;/code&amp;gt;-Methode verwendet werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
using (var context = new MyDbEntities())&lt;br /&gt;
{&lt;br /&gt;
    var persons = context.Persons;&lt;br /&gt;
&lt;br /&gt;
    // Datenbankabfrage wird ausgeführt und als Liste zurückgegeben&lt;br /&gt;
    var allPersons = persons.ToList();&lt;br /&gt;
&lt;br /&gt;
    // Keine weitere Datenbankabfragen durch Verwendung der Liste&lt;br /&gt;
    foreach (var person in allPersons) { /* ... */ }&lt;br /&gt;
    foreach (var person in allPersons) { /* ... */ }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sucht ein bestimmtes Objekt in der Datenbank:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
var person = context.Persons.SingleOrDefault(p =&amp;gt; p.PersonId == personId);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder in Comprehension Syntax:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
var person = (from p in context.Persons&lt;br /&gt;
              where p.PersonId == personId&lt;br /&gt;
              select p).SingleOrDefault();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ [[LINQ]] Selectors&lt;br /&gt;
! Methode !! Ergebnis&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Single()&amp;lt;/code&amp;gt; || Gibt das eine Element zurück, welches die Anfrage liefert. Wirft eine Exception, falls keine oder mehrere Ergebnisse zurückgeliefert werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SingleOrDefault()&amp;lt;/code&amp;gt; || Gibt das eine Element zurück, welches die Anfrage liefert. Gibt null zurück, falls keine Ergebnisse geliefert werden. Wirft eine Exception, falls mehrere Ergebnisse zurückgeliefert werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;First()&amp;lt;/code&amp;gt; || Gibt das erste Element zurück, falls die Anfrage ein oder mehrere Ergebnisse liefert. Wirft eine Exception, falls keine Ergebnisse zurückgeliefert werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;FirstOrDefault()&amp;lt;/code&amp;gt; || Gibt das erste Element zurück, falls die Anfrage ein oder mehrere Ergebnisse liefert. Gibt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; zurück, falls keine Ergebnisse zurückgeliefert werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bei Db-Objekten steht zudem die &amp;lt;code&amp;gt;Find()&amp;lt;/code&amp;gt;-Methode bereit. Diese sucht das Objekt zuerst im Arbeitsspeicher und macht eine Datenbankabfrage, falls das Objekt nicht im Speicher gefunden wird:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
var person = context.Persons.Find(personId);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Lazy, Eager und Explicit Loading ====&lt;br /&gt;
Das Entity Framework verwendet im Normalfall &amp;#039;&amp;#039;{{lang|en|lazy loading}}&amp;#039;&amp;#039;, bei dem Daten aus der Datenbank erst dann geladen werden, wenn die Daten abgefragt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
// lazy loading&lt;br /&gt;
// nur die Personen werden abgefragt und geladen&lt;br /&gt;
var persons = context.Peoples;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Falls weitere Daten mitgeladen werden müssen, wird &amp;#039;&amp;#039;{{lang|en|eager loading}}&amp;#039;&amp;#039; verwendet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
// eager loading&lt;br /&gt;
// Adressen werden bereits bei der Abfrage der Personen geladen&lt;br /&gt;
var persons = context.Peoples.Include(&amp;quot;Addresses&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
// LINQ-to-Entities Beispiel für eager loading&lt;br /&gt;
var persons = context.Peoples.Include(&amp;quot;Addresses&amp;quot;).Where(p =&amp;gt; p.FirstName == fname);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
oder typsicher ab EF5:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
// LINQ-to-Entities Beispiel für eager loading&lt;br /&gt;
var persons = context.Peoples.Include(p =&amp;gt; p.Addresses).Where(p =&amp;gt; p.FirstName == fname);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das explizite Laden (&amp;#039;&amp;#039;{{lang|en|explicit loading}}&amp;#039;&amp;#039;) der Daten ist ähnlich dem {{lang|en|lazy loading}}, erlaubt jedoch das Laden der Navigationseigenschaften (&amp;#039;&amp;#039;{{lang|en|navigation properties}}&amp;#039;&amp;#039;).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
// explicit loading&lt;br /&gt;
var persons = context.Peoples; // wie lazy loading; Adressen werden nicht mitgeladen&lt;br /&gt;
foreach (var person in persons)&lt;br /&gt;
{&lt;br /&gt;
    person.Addresses.Load(); // explicit loading; navigation properties für Adressen werden geladen&lt;br /&gt;
    foreach (var address in person.Addresses)&lt;br /&gt;
    {&lt;br /&gt;
        // ...&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Update Entities ===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete Entities ===&lt;br /&gt;
Löschen eines Entities im Entity Framework 4:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
using (var context = new MyDbEntities())&lt;br /&gt;
{&lt;br /&gt;
    // Abfrage eines Entities aus der Datenbank&lt;br /&gt;
    var person = context.Persons.SingleOrDefault(p =&amp;gt; p.Id == id);&lt;br /&gt;
    if (person == null)&lt;br /&gt;
       return;&lt;br /&gt;
&lt;br /&gt;
    context.Persons.DeleteObject(person);&lt;br /&gt;
    context.SaveChanges();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Löschen eines Entities im Entity Framework 5:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
using (var context = new MyDbEntities())&lt;br /&gt;
{&lt;br /&gt;
    // Abfrage eines Entities aus der Datenbank&lt;br /&gt;
    var person = (for p in context.Persons.SingleOrDefault(p =&amp;gt; p.Id == id);&lt;br /&gt;
&lt;br /&gt;
    if (person == null)&lt;br /&gt;
        return;&lt;br /&gt;
&lt;br /&gt;
    context.Entry(person).State = EntityState.Deleted; // Entity zur Löschung markieren&lt;br /&gt;
    context.SaveChanges(); // Entity in der Datenbank löschen&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorkompilierte Abfragen ===&lt;br /&gt;
Datenbankanfragen werden vom Entity Framework in für die Datenbankschnittstelle passende Anfragen kompiliert. Dieser Vorgang kostet jedoch Zeit, weshalb kompilierte Anfragen – sofern diese erneut benötigt werden – nicht verworfen, sondern in einem Objekt gespeichert und später wiederverwendet werden sollten.&lt;br /&gt;
&lt;br /&gt;
Um bei der ersten Verwendung einer Abfrage mit dem Entity Framework 4 Zeit zu sparen, können Abfragen vorkompiliert werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
static Func&amp;lt;MyDbEntities, int, ObjectQuery&amp;lt;Person&amp;gt;&amp;gt; QueryContactById =&lt;br /&gt;
    CompiledQuery.Compile&amp;lt;MyDbEntities, int, IQueryable&amp;lt;Person&amp;gt;&amp;gt;( (context, personId) =&amp;gt; context.Persons.Select(p =&amp;gt; p.Id == personId) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Entity Framework 5 werden Abfragen automatisch bei der Erstellung vorkompiliert.&lt;br /&gt;
&lt;br /&gt;
=== Transaktionen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
using (var context = new MyDbEntities())&lt;br /&gt;
{&lt;br /&gt;
    using (var scope = new TransactionScope())&lt;br /&gt;
    {&lt;br /&gt;
        // Der TransactionScope sucht den neuesten Context auf dem&lt;br /&gt;
        // Stacktrace und verlinkt sich automatisch mit diesem&lt;br /&gt;
        try&lt;br /&gt;
        {&lt;br /&gt;
            // Bearbeitung von Entities&lt;br /&gt;
&lt;br /&gt;
            context.SaveChanges(); // Speichern der Änderungen in der Datenbank&lt;br /&gt;
            scope.Complete(); // Transaktion wird abgeschlossen&lt;br /&gt;
        }&lt;br /&gt;
        catch (InvalidOperationException e)&lt;br /&gt;
        {&lt;br /&gt;
            // Transaktion fehlgeschlagen&lt;br /&gt;
        }&lt;br /&gt;
    } // scope.Dispose()&lt;br /&gt;
} // context.Dispose()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code First Migrations ===&lt;br /&gt;
&amp;#039;&amp;#039;{{lang|en|Code First Migrations}}&amp;#039;&amp;#039; ist eine Reihe von [[Windows PowerShell|Powershell]]-[[Skriptsprache|Skripten]], welche die Datenbankmigration erleichtern.&lt;br /&gt;
&lt;br /&gt;
* Enable-Migrations&lt;br /&gt;
*: erstellt ein Migrations-Skript&lt;br /&gt;
* Add-Migration&lt;br /&gt;
*: Erstelle ein Skript zur Herstellung der aktuellen Datenbankstruktur&lt;br /&gt;
* Update-Database&lt;br /&gt;
*: Bringt die Datenbankstruktur auf einen bestimmten Zustand. Standardmäßig wird das neueste Migrationsskript verwendet.&lt;br /&gt;
&amp;lt;!-- TODO&lt;br /&gt;
&lt;br /&gt;
=== LINQ to Entities ===&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=Andrew Troelsen&lt;br /&gt;
   |Titel=Pro C# 5.0 and the .Net 4.5 Framework&lt;br /&gt;
   |Verlag=Springer&lt;br /&gt;
   |Datum=2012&lt;br /&gt;
   |ISBN=978-1-4302-4233-8&lt;br /&gt;
   |Seiten=1560}}&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=Julia Lerman, Rowan Miller&lt;br /&gt;
   |Titel=Programming Entity Framework: DbContext; Querying, Changing, and Validating Your Data with Entity Framework&lt;br /&gt;
   |Verlag=[[O’Reilly Verlag|O’Reilly Media]]&lt;br /&gt;
   |Datum=2012&lt;br /&gt;
   |ISBN=978-1-4493-1296-1&lt;br /&gt;
   |Seiten=258}}&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=Julia Lerman, Rowan Miller&lt;br /&gt;
   |Titel=Programming Entity Framework: Code First; Creating and Configuring Data Models from Your Classes&lt;br /&gt;
   |Verlag=O’Reilly Media&lt;br /&gt;
   |Datum=2012&lt;br /&gt;
   |ISBN=978-1-4493-1294-7&lt;br /&gt;
   |Seiten=194}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Internetquelle&lt;br /&gt;
   |url=http://entityframework.codeplex.com/&lt;br /&gt;
   |titel=Microsoft .NET Entity Framework&lt;br /&gt;
   |werk=CodePlex&lt;br /&gt;
   |hrsg=Microsoft&lt;br /&gt;
   |sprache=en&lt;br /&gt;
   |kommentar=Projektseite mit [[Quellcode]] des Entity Frameworks&lt;br /&gt;
   |abruf=2015-03-12}}&lt;br /&gt;
* {{Internetquelle&lt;br /&gt;
   |url=http://www.entityframeworktutorial.net/&lt;br /&gt;
   |titel=Entity Framework Tutorial&lt;br /&gt;
   |sprache=en&lt;br /&gt;
   |abruf=2015-03-12}}&lt;br /&gt;
* {{Internetquelle&lt;br /&gt;
   |url=https://devcouch.de/videos/&lt;br /&gt;
   |titel=Entity Framework Grundlagen Video&lt;br /&gt;
   |sprache=de&lt;br /&gt;
   |abruf=2015-03-15}}&lt;br /&gt;
* {{Internetquelle&lt;br /&gt;
   |url=http://msdn.microsoft.com/en-us/data/hh949853.aspx&lt;br /&gt;
   |titel=Performance Considerations for Entity Framework 5&lt;br /&gt;
   |sprache=en&lt;br /&gt;
   |abruf=2012-11-11}}&lt;br /&gt;
* {{Internetquelle&lt;br /&gt;
   |url=http://msdn.microsoft.com/en-us/data/ee712907&lt;br /&gt;
   |titel=Get Started with Entity Framework (EF)&lt;br /&gt;
   |werk=Data Developer Center&lt;br /&gt;
   |hrsg=[[Microsoft]]&lt;br /&gt;
   |sprache=en&lt;br /&gt;
   |abruf=2012-11-12}}&lt;br /&gt;
* {{Internetquelle&lt;br /&gt;
   |url=http://msdn.microsoft.com/en-us/data/jj593170.aspx&lt;br /&gt;
   |titel=Entity Framework Power Tools&lt;br /&gt;
   |werk=Data Developer Center&lt;br /&gt;
   |hrsg=Microsoft&lt;br /&gt;
   |sprache=en&lt;br /&gt;
   |abruf=2013-03-30}}&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SORTIERUNG:Entity Framework}}&lt;br /&gt;
[[Kategorie:.NET]]&lt;br /&gt;
[[Kategorie:Datenbankschnittstelle]]&lt;/div&gt;</summary>
		<author><name>imported&gt;INOUIW</name></author>
	</entry>
</feed>