Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 d'applications Web à compter de SQL Server Compact 4.0.
Entity Framework dans SQL Server Compact
Pour utiliser Entity Framework avec SQL Server Compact 4.0, vous devez tout d'abord installer Entity Framework. Entity Framework est un composant de .NET Framework 4.
La prise en charge du développement de SQL Server Compact 4.0 est assurée par Visual Studio 2010 Service Pack 1. La prise en charge d'Entity Data Model Designer pour Entity Framework dans Visual Studio 2010 Service Pack 1 est assurée 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.
Dans la version SQL Server Compact 4.0, 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 4.0 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\v4.0.
Notes
Vous ne pouvez utiliser SQL Server Compact 4.0 qu'avec Entity Framework 4 dans .NET Framework version 4. SQL Server Compact 4.0 ne prend pas en charge .NET Framework 3.5 et génère une erreur.
« Code-first »/ Code uniquement
SQL Server Compact 4.0 prend en charge le modèle de programmation « code-first » d'ADO.NET Entity Framework 4. Il existe deux méthodes pour créer des applications Web Entity Framework : Database First et Model First. Model First est une nouvelle fonctionnalité d'ADO.NET Entity Framework 4 (.NET Framework 4) qui permet un flux de travail de développement plus centré sur le code pour un développement appelé Développement « Code-first »/ Code uniquement. Dans ce flux de travail, le CODE est votre Modèle. Le modèle de programmation « code-first » fonctionne de la façon suivante :
Pour utiliser le mode Code uniquement, vous devez créer des classes POCO (Plain Old CLR Object). Elles sont principalement composées de constructeurs.
La prochaine étape consiste à écrire une classe dérivée de ObjectContext pour décrire la forme de votre modèle et la manière d'accéder à vos classes POCO. C'est une classe compatible avec Entity Framework.
À cette étape, vous disposez de tous les éléments pour CLR, mais la classe ObjectContext ne peut pas être utilisée sans métadonnées Entity Framework, lesquelles sont stockées dans le fichier EDMX. En mode Code uniquement, il n'y a pas de fichier EDMX.
Pour utiliser les métadonnées, vous devez définir un ContextBuilder, dans lequel vous définissez votre SqlConnection. ContextBuilder analyse les propriétés de ObjectContext et en déduit un modèle conceptuel, un modèle de stockage et un mappage par convention, par défaut. Puis il utilise les métadonnées et la SqlConnection que vous avez passée via ContextBuilder pour créer une EntityConnection.
Ensuite, une instance de ObjectContext est créée en passant la EntityConnection au constructeur, créé dans les classes POCO.
Une fois créée l'instance de votre contexte, vous pouvez utiliser de nombreuses méthodes d'extension pour :
créer automatiquement un script de base de données ;
vérifier si la base de données existe ;
créer une base de données ;
supprimer une base de données, etc.
Au lieu d'utiliser des conventions, vous pouvez également les remplacer. Dans Entity Framework 4, le ContextBuilder est refactorisé en ModelBuilder et DbModel.
Télécharger ADO.ADO.NET Entity Framework 4.
Limitations de SQL Server Compact
Voici quelques limitations de SQL Server Compact en cas d'utilisation avec Entity Framework :
SQL Server Compact 4.0 prend 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, uniquement si le type de clé est Colonnes d'identité.
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.
Entity Framework vous permet de définir des types d'entité 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 qui ne sont pas de type Identity lève une exception « Non pris en charge ».
La génération de l'Entity Data Model pour SQL Server Compact 4.0 échouera si des noms de contraintes dupliqués figurent dans le schéma SQL Server Compact.
Dans SQL Server Compact, les noms de contraintes sont uniques dans une table, ce qui permet d'autoriser des noms de contraintes dupliqués dans la base de données. Le comportement est différent de SQL Server, où les noms de contraintes sont uniques dans la base de données. Si un schéma SQL Server Compact 4.0 possède des noms de contraintes (relation de clé principale - clé étrangère) d'intégrité référentielle dupliqués, la génération de l'Entity Data Model à l'aide de l'Assistant Entity Data Model d'ADO.NET Entity Framework échouera. Vous devez toujours conserver l'unicité du nom de contrainte dupliqué dans la base de données, en ajoutant par exemple le nom de la table au nom de contrainte.
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.CustomerIdNotez 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_aiContrairement à 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).