Entity Framework (SQL Server Compact)
Entity Framework est un ensemble de technologies dans ADO.NET qui prend en charge le développement d'applications logicielles orientées vers les données. Entity Framework permet aux développeurs d'utiliser des données sous la forme de propriétés et d'objets spécifiques aux domaines, tels que des clients et des adresses de clients, sans qu'il soit nécessaire de se préoccuper des tables et des colonnes de base de données sous-jacentes dans lesquelles sont stockées ces données.
En permettant aux développeurs d'utiliser des données à un niveau supérieur d'abstraction, Entity Framework prend en charge du code qui est indépendant de tout moteur de stockage des données ou schéma relationnel particulier. Les développeurs peuvent créer des applications d'accès aux données en programmant par rapport à un modèle d'application conceptuel au lieu de programmer directement par rapport à un schéma de stockage relationnel.
Les applications et services Entity Framework se composent d'un modèle conceptuel, d'un modèle de stockage et d'un mappage entre les deux. Pour répondre aux besoins des développeurs qui souhaitent dériver un modèle EDM (Entity Data Model) à partir d'une base de données existante, Entity Framework fournit un ensemble d'outils qui génèrent et valident un modèle EDM et créent des classes programmables selon le modèle conceptuel.
Par le biais du modèle EDM, ADO.NET expose des entités en tant qu'objets dans l'environnement .NET. Cela fait de la couche objet une cible idéale pour la prise en charge de LINQ (Language Integrated Query). Cette technologie permet aux développeurs de créer des requêtes flexibles fortement typées sur le contexte de l'objet Entity Framework en utilisant des expressions LINQ et les opérateurs de requête standard LINQ directement à partir de l'environnement de développement. Pour plus d'informations sur Entity Framework et LINQ to Entities, consultez la documentation Entity Framework.
SQL Server Compact assure la prise en charge d'Entity Framework pour la plateforme Windows Desktop à compter de SQL Server Compact 3.5 Service Pack 1 (SP1).
Entity Framework dans SQL Server Compact
Pour utiliser Entity Framework avec SQL Server Compact, vous devez tout d'abord installer Entity Framework Entity Framework est un composant du .NET Framework à compter du .NET Framework 3.5 Service Pack 1 (SP1).
La prise en charge du développement pour SQL Server Compact est fournie par Visual Studio. La prise en charge d'Entity Data Model Designer pour Entity Framework dans Visual Studio est fournie par les Outils Entity Framework. Notez que Entity Data Model Designer (Concepteur d'entités) est un composant de Visual Studio à compter de Visual Studio 2008 Service Pack 1 (SP1). Il s'agit d'un outil visuel permettant de créer et de modifier un modèle EDM. Pour plus d'informations sur cet outil, consultez la documentation Entity Framework.
À compter de la version SQL Server Compact 3.5 SP1, SQL Server Compact fournit un assembly managé : System.Data.SQLServerCe.Entity.dll. L'assembly System.Data.SQLServerCe.Entity.dll est utilisé par le fournisseur de données managées ADO.NET System.Data.SqlServerCE.dll en interne et prend en charge l'accès aux données décrit dans un modèle EDM.
Lorsque vous installez SQL Server Compact 3.5 SP1 ou les versions ultérieures de SQL Server Compact (SSCERuntime-ENU.msi), System.Data.SQLServerCe.Entity.dll est installé dans le dossier %ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5.
Limitations de SQL Server Compact
Voici quelques limitations de SQL Server Compact en cas d'utilisation avec Entity Framework :
SQL Server Compact ne prend pas en charge les entités avec des clés ou des valeurs générées par le serveur en cas d'utilisation avec Entity Framework.
Lors de l'utilisation d'Entity Framework, les clés d'une entité peuvent être marquées comme étant générées par le serveur. Cela permet à la base de données de générer une valeur pour la clé durant l'insertion ou la création d'entité. De plus, zéro propriété d'une entité ou plus peuvent être marquées en tant que valeurs générées par le serveur. Pour plus d'informations, consultez la rubrique relatif au Store Generated Pattern dans la documentation Entity Framework.
SQL Server Compact ne prend pas en charge les entités avec des clés ou des valeurs générées par le serveur en cas d'utilisation avec Entity Framework, bien que Entity Framework vous permette de définir des types d'entités avec des clés ou des valeurs générées par le serveur. Toute opération de manipulation de données sur une entité qui possède des valeurs générées par le serveur lève une exception « Non pris en charge ».
SQL Server Compact ne prend pas en charge les expressions SKIP dans les requêtes de pagination en cas d'utilisation avec Entity Framework. En revanche, SQL Server Compact prend en charge les expressions LIMIT et TOP dans les requêtes de pagination.
Les requêtes de pagination sont conçues pour prendre en charge la pagination sans état (défilement) dans les résultats d'une requête.
L'exemple suivant montre comment écrire une requête de pagination dans Entity Framework à l'aide des opérateurs LINQ Skip et Take. Notez que SQL Server Compact ne prend pas en charge l'expression SKIP dans une requête de pagination :
LINQ :
customers.OrderBy(c => c.Name).Skip(10).Take(20)
L'exemple suivant montre comment écrire une requête de pagination dans Entity Framework à l'aide des constructions SKIP, LIMIT et TOP d'Entity SQL. Notez que SQL Server Compact ne prend pas en charge l'expression SKIP dans une requête de pagination :
Entity SQL :
SELECT value c FROM NW.Customers AS c ORDER BY c.Name skip 10 limit 20;
SQL Server Compact ne prend pas en charge les jointures externes entières qui utilisent Entity Framework, bien que Entity SQL prenne en charge les jointures externes entières. Par exemple, la requête suivante n'est pas prise en charge :
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
Notez que SQL Server Compact prend en charge les jointures internes, les jointures externes gauches et les jointures externes droites qui utilisent Entity Framework.
SQL Server Compact ne prend pas en charge les sous-clauses COLLATE dans la clause ORDER BY d'une requête Entity SQL.
Entity SQL permet de spécifier une sous-clause COLLATE dans le cadre de chaque clé dans une clause ORDER BY. La sous-clause COLLATE est applicable uniquement aux expressions de chaîne et elle détermine la sémantique de comparaison à utiliser pour cette expression.
SQL Server Compact, en cas d'utilisation avec Entity Framework, ne prend pas en charge l'utilisation d'une sous-clause COLLATE dans la clause ORDER BY d'une requête Entity SQL. Par exemple, la requête suivante n'est pas prise en charge :
Entity SQL :
SELECT value c FROM NW.Customers AS c ORDER BY c.Name COLLATE Traditional_Spanish_ci_ai
Contrairement à SQL Server, SQL Server Compact ne prend pas en charge les opérations modulo (dénotées par le signe %) sur les types de données real, float, money et numeric.
Dans SQL Server Compact, les requêtes suivantes génèrent un message d'erreur :
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))
Lorsque vous exécutez une telle requête, le message d'erreur suivant s'affiche : « Le modulo n'est pas pris en charge sur les types de données real, float, money et numeric. [ Type de données = numeric ] »
SQL Server Compact ne prend pas en charge DISTINCT dans les agrégats (max, min, sum, count).
Si vous essayez d'écrire des requêtes Entity SQL et Transact-SQL qui utilisent DISTINCT dans des agrégats (max, min, sum, count), une exception « non pris en charge » est levée. L'exemple suivant illustre une requête Entity SQL qui utilise DISTINCT dans un agrégat count.
Entity SQL :
SELECT count(distinct [TaskId]) FROM ArubaContainer.TaskSet AS [Task]
SQL Server Compact ne prend pas en charge les délais d'expiration de commande en cas d'utilisation avec Entity Framework.
Entity Framework autorise la spécification de délais d'expiration de commande par le biais de la propriété ObjectContext.QueryTimeout ou EntityCommand.CommandTimeout.
SQL Server Compact ne prend pas en charge les délais d'expiration en cas d'utilisation avec Entity Framework. Autrement dit, le délai d'expiration de commande ne doit pas être défini sur une valeur autre que zéro. Si une propriété de délai d'expiration de connexion est définie, une exception NotSupportedException(“CommandTimeout”) est levée par la base de données SQL Server Compact.
SQL Server Compact prend en charge uniquement les chaînes Unicode.
Entity Framework assure la prise en charge des chaînes Unicode et non-Unicode. SQL Server Compact prend en charge uniquement les chaînes Unicode. Le littéral <literal> de type 'String' n'est pas pris en charge par le fournisseur actuel. L'exception « near constant literal » est levée par SQL Server Compact dans les chaînes non-Unicode.
SQL Server Compact ne prend pas en charge les procédures stockées et les vues.
Exemple
Pour savoir comment créer des applications Entity Framework qui utilisent la base de données SQL Server Compact comme source de données, consultez Création d'une application Entity Framework (SQL Server Compact).