Entity Framework (SQL Server Compact)
Das Entity Framework besteht aus einer Reihe von Technologien in ADO.NET, die die Entwicklung datenorientierter Softwareanwendungen unterstützen. Das Entity Framework ermöglicht Entwicklern die Arbeit mit Daten in Form von domänenspezifischen Objekten und Eigenschaften, wie Kunden und Kundenadressen, ohne dass dabei auf die zugrunde liegenden Datenbanktabellen und -spalten eingegangen werden muss, in denen die Daten gespeichert sind.
Da Entwickler auf einer höheren Abstraktionsebene mit den Daten arbeiten können, unterstützt das Entity Framework Code, der von spezifischen Datenspeichermodulen und relationalen Schemas unabhängig ist. Entwickler können Anwendungen für den Datenzugriff erstellen, indem sie für ein konzeptionelles Anwendungsmodell und nicht direkt für ein relationales Speicherschema programmieren.
Entity Framework-Anwendungen und -Dienste bestehen aus einem konzeptionellen Modell, einem Speichermodell und einem Mapping zwischen den beiden. Um die Anforderungen von Entwicklern zu erfüllen, die ein Entity Data Model (EDM) von einer bestehenden Datenbank ableiten möchten, stellt das Entity Framework eine Reihe von Tools zur Verfügung, mit denen ein EDM generiert und validiert werden kann und auf dem konzeptionellen Modell basierende programmierbare Klassen erstellt werden können.
Mithilfe des EDM stellt ADO.NET Entitäten als Objekte in der .NET-Umgebung zur Verfügung. Damit ist die Objektebene für die Unterstützung von Language-Integrated Query (LINQ) optimal geeignet. LINQ to Entities ermöglicht Entwicklern die Erstellung von flexiblen, stark typisierten Abfragen für den Entity Framework-Objektkontext mithilfe von LINQ-Ausdrücken und den LINQ-Standardabfrageoperatoren direkt aus der Entwicklungsumgebung. Weitere Informationen über das Entity Framework und LINQ to Entities finden Sie in der Entity Framework-Dokumentation.
SQL Server Compact 3.5 SP1 bietet Unterstützung für das Entity Framework für die Windows Desktop-Plattform.
Entity Framework in SQL Server Compact
Für die Verwendung von Entity Framework mit SQL Server Compact muss zunächst Entity Framework installiert werden. Das Entity Framework ist seit .NET Framework 3.5 Service Pack 1 (SP1) eine Komponente von .NET Framework.
Die Entwicklungsunterstützung für SQL Server Compact wird von Visual Studio bereitgestellt. Die Unterstützung des Entity Data Model-Designers für das Entity Framework in Visual Studio wird durch die Entity Framework-Tools bereitgestellt. Beachten Sie, dass der Entity Data Model-Designer (Entity Designer) seit Visual Studio 2008 Service Pack 1 (SP1) eine Komponente von Visual Studio ist. Es handelt sich dabei um ein visuelles Tool zum Erstellen und Bearbeiten eines Entity Data Model (EDM). Weitere Informationen über dieses Tool finden Sie in der Entity Framework-Dokumentation.
Wenn Sie Visual Studio 2008 anstelle von Visual Studio 2008 SP1 verwenden möchten, installieren Sie "Microsoft SQL Server Compact 3.5 SP1 Beta for Entity Framework Beta 3". Dies ermöglicht die Integration von Entity Designer in SQL Server Compact. Weitere Informationen über die Installation dieser Betaversion finden Sie im Microsoft Download Center.
Seit der Version SQL Server Compact 3.5 SP1 stellt SQL Server Compact eine verwaltete Assembly bereit: System.Data.SQLServerCe.Entity.dll. Die System.Data.SQLServerCe.Entity.dll-Assembly wird vom verwalteten ADO.NET-Datenanbieter System.Data.SqlServerCE.dll intern verwendet und unterstützt den Zugriff auf in einem Entity Data Model (EDM) beschriebene Daten.
Bei der Installation der SP1-Version von SQL Server Compact 3.5 (SSCERuntime-ENU.msi) wird die Datei System.Data.SQLServerCe.Entity.dll im Ordner %ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5 installiert.
Einschränkungen von SQL Server Compact
Zu den Einschränkungen von SQL Server Compact bei der Verwendung mit dem Entity Framework gehören die folgenden:
SQL Server Compact unterstützt bei der Verwendung mit dem Entity Framework keine Entitäten mit vom Server generierten Schlüsseln oder Werten.
Bei der Verwendung des Entity Framework können die Schlüssel einer Entität als vom Server generiert markiert werden. Damit kann die Datenbank beim Einfügen oder bei der Erstellung einer Entität einen Wert für den Schlüssel generieren. Außerdem können Eigenschaften einer Entität als vom Server generiert markiert werden. Weitere Informationen finden Sie im Thema Store Generated Pattern in der Entity Framework-Dokumentation.
SQL Server Compact unterstützt keine Entitäten mit vom Server generierten Schlüsseln oder Werten, wenn es mit dem Entity Framework verwendet wird, obwohl das Entity Framework die Definition von Entitätstypen mit vom Server generierten Schlüsseln oder Werten zulässt. Beim Ausführen eines Datenbearbeitungsvorgangs für eine Entität mit vom Server generierten Werten wird eine "Nicht unterstützt"-Ausnahme ausgelöst.SQL Server Compact unterstützt bei der Verwendung mit dem Entity Framework keine SKIP-Ausdrücke in Pagingabfragen. Andererseits unterstützt SQL Server Compact den LIMIT-Ausdruck und den TOP-Ausdruck in Pagingabfragen.
Pagingabfragen sind für die Unterstützung von zustandslosem Paging (Bildlauf oder Windowing) durch die Ergebnisse einer Abfrage vorgesehen.
Im folgenden Beispiel wird eine Pagingabfrage für das Entity Framework dargestellt, in der der LINQ Skip-Operator und der Take-Operator verwendet werden. Beachten Sie, dass SQL Server Compact keine SKIP-Ausdrücke in einer Pagingabfrage erlaubt:LINQ:
customers.OrderBy(c => c.Name).Skip(10).Take(20)
Im folgenden Beispiel wird eine Pagingabfrage für das Entity Framework dargestellt, in der die Konstrukte SKIP, LIMIT und TOP von Entity SQL verwendet werden. Beachten Sie, dass SQL Server Compact keine SKIP-Ausdrücke in einer Pagingabfrage erlaubt:
Entity SQL:
SELECT value c FROM NW.Customers AS c ORDER BY c.Name skip 10 limit 20;
SQL Server Compact unterstützt keine vollständigen äußeren Verknüpfungen, in denen das Entity Framework verwendet wird, obwohl Entity SQL vollständige äußere Verknüpfungen unterstützt. Beispielsweise wird die folgende Abfrage nicht unterstützt:
Entity SQL:
SELECT c.Name, c.Id, o.Id FROM NW.Customers AS c FULL OUTER JOIN NW.Orders AS o ON c.Id = o.CustomerId
Beachten Sie, dass SQL Server Compact innere Verknüpfungen, linke äußere Verknüpfungen und rechte äußere Verknüpfungen, in denen das Entity Framework verwendet wird, unterstützt.
SQL Server Compact unterstützt keine COLLATE-Unterklauseln in der ORDER BY-Klausel einer Entity SQL-Abfrage.
Entity SQL erlaubt die Angabe einer COLLATE-Unterklausel als Teil der einzelnen Schlüssel in einer ORDER BY-Klausel. Die COLLATE-Unterklausel kann nur für Ausdrücke verwendet werden, die zu einer Zeichenfolge ausgewertet werden, und legt die für diesen Ausdruck zu verwendende Vergleichssemantik fest.SQL Server Compact unterstützt im Zusammenhang mit dem Entity Framework nicht die COLLATE-Unterklausel in der ORDER BY-Klausel einer Entity SQL-Abfrage. Beispielsweise wird die folgende Abfrage nicht unterstützt:
Entity SQL:
SELECT value c FROM NW.Customers AS c ORDER BY c.Name COLLATE Traditional_Spanish_ci_ai
Im Gegensatz zu SQL Server unterstützt SQL Server Compact keine Modulooperationen (durch "%" bezeichnet) für die Datentypen real, float, money und numeric.
In SQL Server Compact lösen die folgenden Abfragen eine Fehlermeldung aus:Entity SQL:
( CAST ( 1 AS Edm.Int16) % CAST ( 1 AS Edm.Decimal) )
Transact-SQL:
SELECT cast (1 as smallint) %cast (1 as decimal(28,4))
Bei der Ausführung einer solchen Abfrage wird die folgende Fehlermeldung angezeigt: "Modulo wird für die Datentypen 'real', 'float', 'money' und 'numeric' nicht unterstützt. [ Datentyp = numeric ]"
SQL Server Compact unterstützt DISTINCT in Aggregaten (max, min, sum, count) nicht.
Werden Entity SQL- und Transact-SQL-Abfragen geschrieben, in denen DISTINCT in Aggregaten (max, min, sum, count) verwendet werden, wird eine "Nicht unterstützt"-Ausnahme ausgelöst. Im folgenden Beispiel ist eine Entity SQL-Abfrage dargestellt, in der DISTINCT im Aggregat count verwendet wird.Entity SQL:
SELECT count(distinct [TaskId]) FROM ArubaContainer.TaskSet AS [Task]
SQL Server Compact unterstützt bei der Verwendung mit dem Entity Framework keine Befehlstimeouts.
Das Entity Framework ermöglicht Timeouts für Befehle. Sie werden mithilfe der ObjectContext.QueryTimeout-Eigenschaft oder der EntityCommand.CommandTimeout-Eigenschaft festgelegt.
SQL Server Compact unterstützt bei der Verwendung mit dem Entity Framework keine Timeouts. Das heißt, dass das Timeout für Befehle nicht auf einen anderen Wert als Null festgelegt werden darf. Wenn ein Verbindungstimeout festgelegt wird, wird eine NotSupportedException(“CommandTimeout”)-Ausnahme von der SQL Server Compact-Datenbank ausgelöst.SQL Server Compact unterstützt nur Unicode-Zeichenfolgen.
Das Entity Framework unterstützt sowohl Unicode- als auch Nicht-Unicode-Zeichenfolgen. SQL Server Compact unterstützt nur Unicode-Zeichenfolgen. Das Literal <literal> vom Typ "String" wird vom aktuellen Anbieter nicht unterstützt. Die "near constant literal"-Ausnahme wird von SQL Server Compact für Nicht-Unicode-Zeichenfolgen ausgelöst.SQL Server Compact unterstützt keine gespeicherten Prozeduren und Sichten.
Beispiel
Informationen über die Erstellung von Entity Framework-Anwendungen, die die SQL Server Compact-Datenbank als Datenquelle verwenden, finden Sie unter Erstellen einer Entity Framework-Anwendung (SQL Server Compact).
Siehe auch
Andere Ressourcen
Erstellen von verwalteten Anwendungen (SQL Server Compact)