Procédure pas à pas : génération de types F# à partir d'un fichier de schéma EDMX (F#)
Cette procédure pas - à - pas pour F# 3.0 indique comment créer des types pour les données qui sont représentées par l'Entity Data Model (EDM), le schéma est spécifié dans un fichier .edmx.Cette procédure pas - à - pas montre également comment utiliser le fournisseur de type d'EdmxFile.Avant de commencer, déterminez si un fournisseur de type SqlEntityConnection est une option plus appropriés comme fournisseur de type.Le type de fournisseur SqlEntityConnection fonctionne bien pour les scénarios où vous avez une base de données active à laquelle vous pouvez vous connecter pendant la phase de développement de votre projet, et vous ne vous occupez pas de spécifier la chaîne de connexion au moment de la compilation.Toutefois, ce type de fournisseur est également limité parce qu'il n'expose pas autant de fonctionnalités de base de données que le fournisseur de type d'EdmxFile.En outre, si vous n'avez pas une connexion de base de données active pour un projet de base de données qui utilise l'Entity Data Model, vous pouvez utiliser le fichier .edmx pour coder la base de données.Lorsque vous utilisez le fournisseur de type d'EdmxFile, le compilateur F# exécute EdmGen.exe pour générer des types qu'elle fournit.
Cette procédure pas - à - pas décrit les tâches suivantes, que vous devez exécuter dans cette ordre pour que la procédure pas - à - pas réussisse :
Créer un fichier EDMX
Création du projet
Recherche ou crée la chaîne de connexion pour l'Entity Data Model
Configurer le fournisseur de type
Interrogation des données
Appeler une procédure stockée
Créer un fichier EDMX
Si vous avez déjà un fichier EDMX, vous pouvez ignorer cette étape.
Pour créer un fichier EDMX
- Si vous n'avez pas de fichier EDMX, vous pouvez suivre les instructions dans ADO.NET Entity Framework démarrage rapide de création d'un Entity Data Model et le fichier EDMX pour une base de données.Sinon, vous pouvez faire référence aux instructions à la fin de cette procédure pas - à - pas de l'étape Configurer l'Entity Data Model.
Création du projet
Dans cette étape, vous créez un projet et lui ajouter les références appropriées pour utiliser le fournisseur de type EDMX.
Pour créer et paramétrer le projet F#
Fermez le projet précédent, créez un autre projet, et nommez -le SchoolEDM.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Références, puis sélectionnez Ajouter une référence dans le menu contextuel.
Dans la zone Assemblys , sélectionnez le nœud framework .
Dans la liste d'assemblies disponibles, sélectionnez les assemblys System.Data.Entity et System.Data.Linq , puis choisissez le bouton Ajouter pour ajouter des références aux assemblys suivants à votre projet.
Dans la zone Assemblys , sélectionnez le nœud Extensions .
Dans la liste d'extensions disponibles, ajoutez une référence à l'assembly de FSharp.Data.TypeProviders.
Ajoutez le code suivant pour ouvrir les espaces de noms appropriés.
open System.Data.Linq open System.Data.Entity open Microsoft.FSharp.Data.TypeProviders
Recherche ou crée la chaîne de connexion pour l'Entity Data Model
La chaîne de connexion pour l'Entity Data Model (chaîne de connexion EDMX) comprend non seulement la chaîne de connexion du fournisseur de base de données mais également des informations supplémentaires.Par exemple, la chaîne de connexion EDMX pour une base de données SQL Server simple ressemble au code suivant.
let edmConnectionString = "metadata=res://*/;provider=System.Data.SqlClient;Provider Connection String='Server=SERVER\Instance;Initial Catalog=DatabaseName;Integrated Security=SSPI;'"
Pour plus d'informations sur les chaînes de connexion EDMX, consultez Connection Strings.
Pour rechercher ou créer la chaîne de connexion pour l'Entity Data Model
Il peut être difficile de générer des chaînes de connexion EDMX manuellement, vous pouvez gagner du temps en les générant par programme.Si vous connaissez la chaîne de connexion EDMX, vous pouvez ignorer cette étape et simplement utiliser cette chaîne dans l'étape suivante.Sinon, utilisez le code suivant pour générer la chaîne de connexion EDMX d'une chaîne de connexion à une base de données que vous fournissez.
open System open System.Data open System.Data.SqlClient open System.Data.EntityClient open System.Data.Metadata.Edm let getEDMConnectionString(dbConnectionString) = let dbConnection = new SqlConnection(connectionString) let resourceArray = [| "res://*/" |] let assemblyList = [| System.Reflection.Assembly.GetCallingAssembly() |] let metaData = MetadataWorkspace(resourceArray, assemblyList) new EntityConnection(metaData, dbConnection)
Configurer le fournisseur de type
Dans cette étape, vous créez et configurez le type de fournisseur avec la chaîne de connexion EDMX, et vous générez des types pour le schéma défini dans le fichier .edmx.
Pour configurer le fournisseur de type et générer des types
Copiez le fichier .edmx que vous avez créé dans la première étape de cette procédure pas - à - pas dans votre dossier du projet.
Ouvrez le menu contextuel du nœud de projet dans votre projet F#, choisissez Ajouter un élément existant, puis sélectionnez le fichier .edmx pour l'ajouter à votre projet.
Entrez le code suivant pour activer le fournisseur de type pour votre fichier .edmx.Remplacez Serveur\instance par le nom de votre serveur qui exécute SQL Server et le nom de votre instance, et utilisez le nom de votre fichier .edmx de la première étape de cette procédure pas - à - pas.
type edmx = EdmxFile<"Model1.edmx", ResolutionFolder = @"<folder that contains your .edmx file>> let edmConnectionString = getEDMConnectionString("Data Source=SERVER\instance;Initial Catalog=School;Integrated Security=true;") let context = new edmx.SchoolModel.SchoolEntities(edmConnectionString)
Interrogation des données
Dans cette étape, vous utilisez des expressions de requête F# pour interroger la base de données.
Pour interroger les données
Entrez le code suivant pour interroger les données dans un Entity Data Model.
query { for course in context.Courses do select course } |> Seq.iter (fun course -> printfn "%s" course.Title) query { for person in context.Person do select person } |> Seq.iter (fun person -> printfn "%s %s" person.FirstName person.LastName) // Add a where clause to filter results query { for course in context.Courses do where (course.DepartmentID = 1) select course) |> Seq.iter (fun course -> printfn "%s" course.Title) // Join two tables query { for course in context.Courses do join (for dept in context.Departments -> course.DepartmentID = dept.DepartmentID) select (course, dept.Name) } |> Seq.iter (fun (course, deptName) -> printfn "%s %s" course.Title deptName)
Appeler une procédure stockée
Vous pouvez appeler des procédures stockées à l'aide du fournisseur de type EDMX.Dans la procédure suivante, la base de données School contient une procédure stockée, UpdatePerson, qui met à jour un enregistrement donné, de nouvelles valeurs des colonnes.Vous pouvez utiliser cette procédure stockée car elle est exposé en tant que méthode sur le type du DataContext.
Pour appeler une procédure stockée
Ajoutez le code suivant pour mettre à jour les enregistrements.
// Call a stored procedure. let nullable value = new System.Nullable<_>(value) // Assume now that you must correct someone's hire date. // Throw an exception if more than one matching person is found. let changeHireDate(lastName, firstName, hireDate) = query { for person in context.People do where (person.LastName = lastName && person.FirstName = firstName) exactlyOne } |> (fun person -> context.UpdatePerson(nullable person.PersonID, person.LastName, person.FirstName, nullable hireDate, person.EnrollmentDate)) changeHireDate("Abercrombie", "Kim", DateTime.Parse("1/12/1998")) |> printfn "Result: %d"
Le résultat est 1 si vous réussissez.Notez qu´ exactlyOne est utilisé dans l'expression de requête pour garantir qu'un seul résultat est retourné ; sinon, une exception est levée.De plus, pour utiliser des valeurs nullables plus facilement, vous pouvez utiliser la fonction simple nullable définie dans ce code pour créer une valeur nullable en dehors d'une valeur ordinaire.
Configurer l'Entity Data Model
Vous devez exécuter cette procédure uniquement si vous souhaitez savoir comment générer un Entity Data Model complet d'une base de données et vous ne disposez pas d'une base de données avec laquelle tester.
Pour créer le modèle EDM (Entity Data Model)
Dans la barre de menus, sélectionnez SQL, éditeur Transact-SQL, Nouvelle requête pour créer une base de données.Si vous y êtes invité, spécifiez votre serveur de base de données et instance.
Copiez et collez le contenu du script de base de données qui crée la base de données student, comme décrit Creating the School Sample Database .
Les étapes suivantes dans cette procédure pas - à - pas sont basés sur ADO.NET Entity Data Model Quickstart.
Exécutez le script SQL en choisissant le bouton de barre d'outils avec le symbole de triangle ou avec le raccourci clavier Ctrl+Q.
Dans Explorateur de serveurs, ouvrez le menu contextuel pour Connexions de données, choisissez Ajouter une connexion, puis entrez le nom du serveur de base de données, le nom de l'instance, et la base de données School.
Créez un projet d'application console C# ou Visual Basic, ouvrez le menu contextuel, choisissez Ajouter un nouvel élément, puis choisissez ADO.NET Entity Data Model.
L'Assistant Entity Data Model s'ouvre.À l'aide de cet assistant, vous pouvez choisir la façon dont vous souhaitez créer l'Entity Data Model.
Sous choisissez le contenu de modèle, activez la case à cocher Générer à partir de la base de données .
Sur la page suivante, sélectionnez votre base de données nouvellement créé School comme connexion de données.
Cette connexion doit ressembler à <servername>.<instancename>.School.dbo.
Copiez votre chaîne de connexion d'entité au presse-papiers car cette chaîne peut être importante plus tard.
Assurez -vous que la case à cocher pour enregistrer la chaîne de connexion d'entité au fichier App.Config est sélectionnée, et noter la valeur de chaîne dans la zone de texte, qui doit vous aider à localiser la chaîne de connexion ultérieurement, si nécessaire.
Sur la page suivante choisissez Tables et Procédures stockées et fonctions.
En choisissant ces nœuds de niveau supérieur, vous sélectionnez toutes les tables, les procédures stockées, et les fonctions.Vous pouvez également choisir ces éléments individuellement, si vous le souhaitez.
Vérifiez que les cases à cocher des autres paramètres sont sélectionnées.
La première case à cocher Pluraliser ou singulariser les noms d'objets générés indique si les formes singulières doivent être misent au pluriel par conventions de correspondance de nommage des objets qui représentent des tables de base de données.La case à cocher Inclure les colonnes clés étrangères dans le modèle détermine s'il faut inclure les champs pour lesquels l'objectif est de joindre d'autres champs dans les types d'objets générés pour le schéma de base de données.La troisième case à cocher indique s'il faut inclure les procédures stockées et les fonctions dans le modèle.
Sélectionnez le bouton Terminer pour générer un fichier .edmx qui contient un Entity Data Model basé sur la base de données School.
Un fichier, Model1.edmx, est ajouté à votre projet, et un schéma de base de données apparaît.
Dans la barre de menus, sélectionnez Afficher, Autres fenêtres, Navigateur Entity Data Model pour afficher tous les détails du modèle ou Détails de mappage Entity Data Model pour ouvrir une fenêtre qui montre comment le modèle objet généré mappe sur des tables et des colonnes de base de données.
Étapes suivantes
Explorez d'autres requêtes en examinant les opérateurs de requête disponibles comme indiqué dans Expressions de requête (F#).
Voir aussi
Tâches
Référence
EdmxFile, fournisseur de type (F#)