Freigeben über


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 einer Zuordnung 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 zum Entity Framework und zu LINQ to Entities finden Sie in der Entity Framework-Dokumentation.

SQL Server Compact bietet ab SQL Server Compact 4.0 Unterstützung für das Entity Framework für die Webanwendungsplattform.

Entity Framework in SQL Server Compact

Für die Verwendung von Entity Framework mit SQL Server Compact 4.0 muss zunächst Entity Framework installiert werden. Entity Framework ist eine Komponente von .NET Framework 4.

Die Entwicklungsunterstützung für SQL Server Compact 4.0 wird von Visual Studio 2010 Service Pack 1 bereitgestellt. Die Unterstützung des Entity Data Model-Designers für Entity Framework in Visual Studio 2010 Service Pack 1 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 zu diesem Tool finden Sie in der Entity Framework-Dokumentation.

In der Version SQL Server Compact 4.0 wird von SQL Server Compact eine verwaltete Assembly bereitgestellt: 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.

Beim Installieren von SQL Server Compact 4.0 oder höheren Versionen von SQL Server Compact (SSCERuntime-ENU.msi) wird die Datei System.Data.SQLServerCe.Entity.dll im Ordner %ProgramFiles%\Microsoft SQL Server Compact Edition\v4.0 installiert.

Hinweis

Sie können SQL Server Compact 4.0 nur mit Entity Framework 4 in .NET Framework Version 4 verwenden. .NET Framework 3.5 wird von SQL Server Compact 4.0 nicht unterstützt und löst einen Fehler aus.

Code First/Code Only

SQL Server Compact 4.0 unterstützt das Code-First-Programmiermodell von ADO.NET Entity Framework 4. Es gibt zwei Möglichkeiten zum Erstellen von Entity Framework-Webanwendungen: Database First (Datenbank zuerst) und Model First (Modell zuerst). Model First ist eine neue Funktion in ADO.NET Entity Framework 4 (.NET Framework 4), bei der die Codebezogenheit des Entwicklungsworkflows bei Entwicklungen vom Typ Code-First-/Code-Only-Entwicklung betont wird. Bei diesem Workflow ist der CODE das Modell. Das Code-First-Programmiermodell funktioniert wie folgt:

  • Zur Verwendung von Code Only sollten Sie einige POCO-Klassen (Plain Old CLR Object) erstellen. Diese bestehen hauptsächlich aus Konstruktoren.

  • Der nächste Schritt ist das Schreiben einer Klasse, die vom ObjectContext abgeleitet ist, um die Form des Modells und die Art des Zugriffs auf die POCO-Klassen zu beschreiben. Es handelt sich dabei um eine Klasse mit Entity Framework-Bezug.

An diesem Punkt verfügen Sie über alle erforderlichen Elemente für CLR, aber die ObjectContext-Klasse kann nicht ohne Entity Framework-Metadaten verwendet werden, die in einer EDMX-Datei gespeichert sind. Bei Code Only wird keine EDMX-Datei verwendet.

  • Zum Verwenden der Metadaten müssen Sie ContextBuilder definieren, um die Definition von SqlConnection durchzuführen. ContextBuilder führt einen Scan durch die Eigenschaften von ObjectContext aus und leitet anhand der Konvention eine Standardvorgabe für das konzeptionelle Modell, das Speichermodell und die Zuordnung her. Anschließend werden die Metadaten und die SqlConnection, die Sie per ContextBuilder übergeben haben, zum Erstellen einer EntityConnection verwendet.

  • Danach wird eine Instanz von ObjectContext erstellt, indem das EntityConnection-Element an den Konstruktor übergeben wird, der in POCO-Klassen erstellt wird.

  • Nachdem die Instanz des Kontexts erstellt wurde, können Sie viele Erweiterungsmethoden verwenden, um Folgendes durchzuführen:

    1. Automatisches Erstellen eines Datenbankskripts

    2. Überprüfen des Vorhandenseins der Datenbank

    3. Erstellen einer Datenbank

    4. Löschen einer Datenbank usw.

Sie können Konventionen auch überschreiben, anstatt sie zu verwenden. In Entity Framework 4 wird ContextBuilder in ModelBuilder und DbModel umgestaltet.

Der Download steht unter ADO.NET Entity Framework 4 zur Verfügung.

Einschränkungen von SQL Server Compact

Zu den Einschränkungen von SQL Server Compact bei der Verwendung mit dem Entity Framework gehören:

  • SQL Server Compact 4.0 unterstützt bei der Verwendung mit dem Entity Framework keine Entitäten mit vom Server generierten Schlüsseln oder Werten. Dies ist nur möglich, wenn der Schlüssel den Typ Identitätsspalten aufweist.

    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 StoreGeneratedPattern in der Entity Framework-Dokumentation.

    Das Entity Framework lässt die Definition von Entitätstypen mit vom Server generierten Schlüsseln oder Werten zu. Beim Ausführen eines Datenbearbeitungsvorgangs für eine Entität mit vom Server generierten Werten, die nicht den Typ Identität aufweisen, wird eine ''Nicht unterstützt''-Ausnahme ausgelöst.

  • Die Generierung des Entitätsdatenmodells für SQL Server Compact 4.0 schlägt fehl, wenn das SQL Server Compact-Schema doppelte Einschränkungsnamen enthält

    In SQL Server Compact sind die Einschränkungsnamen in einer Tabelle eindeutig, und daher sind doppelte Einschränkungsnamen in der Datenbank zulässig. Das Verhalten unterscheidet sich von SQL Server, wo die Einschränkungsnamen in der gesamten Datenbank eindeutig sind. Wenn ein SQL Server Compact 4.0-Schema Einschränkungsnamen mit doppelter referenzieller Integrität (Primärschlüssel/Fremdschlüssel-Beziehung) beinhaltet, tritt bei der Generierung des Entitätsdatenmodells mit dem Entity Data Model-Assistenten im ADO.NET Entity Framework ein Fehler auf. Sie sollten in der Datenbank immer einen eindeutigen Einschränkungsnamen beibehalten, zum Beispiel durch Hinzufügen des Tabellennamens zum Einschränkungsnamen.

  • SQL Server Compact unterstützt keine vollständigen äußeren Joins, in denen das Entity Framework verwendet wird, obwohl Entity SQL vollständige äußere Joins 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 Joins, linke äußere Joins und rechte äußere Joins, 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)