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.
Cette procédure pas - à - pas pour F# 3,0 indique comment accéder à des données typées pour une base de données SQL sur ADO.NET Entity Data Model.Cette procédure pas - à - pas vous indique comment installer le fournisseur de type F# SqlEntityConnection à utiliser avec une base de données SQL, comment écrire des requêtes sur les données, comment appeler des procédures stockées sur la base de données, ainsi que comment utiliser certains types et les méthodes ADO.NET Entity Framework pour mettre à jour la base de données.
Cette procédure pas - à - pas décrit les tâches suivantes, que vous devez exécuter dans cette commande pour la procédure pas - à - pas réussisse :
Créez la base de données School. .
Créez et configurez un projet F# .
Configurez le fournisseur de type, puis connectez -vous à l'Entity Data Model .
Interrogation de la base de données .
Mise à jour de la base de données
Composants requis
Vous devez avoir accès à un serveur qui exécute SQL Server sur lequel vous pouvez créer une base de données pour compléter ces étapes.
Créez la base de données School.
Vous pouvez créer la base de données School sur un serveur qui exécute SQL Server auquel vous avez accès d'administration, ou vous pouvez utiliser LocalDB.
Pour créer la base de données School.
Dans Explorateur de serveurs, ouvrez le menu contextuel du nœud Connexions de données , puis choisissez Ajouter une connexion.
La boîte de dialogue Ajouter une connexion s'affiche.
Dans la zone Nom du serveur , spécifiez le nom d'une instance de SQL Server à laquelle vous avez un accès administratif, ou spécifiez (localdb \ v11.0) si vous n'avez pas accès à un serveur.
SQL Server Express LocalDB fournit un serveur de base de données léger pour le développement et les tests sur votre ordinateur.Pour plus d’informations sur les ressources, voir Procédure pas à pas : création d'une base de données LocalDB.
Un nœud est créé dans Explorateur de serveurs sous Connexions de données.
Ouvrez le menu contextuel pour le nouveau nœud de connexion, puis choisissez Nouvelle requête.
Ouvrez Créer l'exemple de base de données School sur le site Web Microsoft, puis copiez et collez le script de base de données qui crée la base de données student dans la fenêtre de l'éditeur.
Les étapes suivantes dans cette procédure pas - à - pas sont basés sur le didacticiel suivant : ADO.NET Entity Data Model Quickstart.
Créez et configurez un projet F#
Dans cette étape, vous créez un projet et le configurez pour utiliser un fournisseur de type.
Pour créer et configurer un 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.
Sélectionnez le nœud framework , puis, dans la liste framework , choisissez System.Data, System.Data.Entity, et System.Data.Linq.
Sélectionnez le nœud Extensions , ajoutez une référence à l'assembly de FSharp.Data.TypeProviders , puis choisissez le bouton OK pour fermer la boîte de dialogue.
Ajoutez le code suivant pour définir un module interne et ouvrir les espaces de noms appropriés.Le fournisseur de type peut injecter des types uniquement dans un espace de noms privé ou interne.
module internal SchoolEDM open System.Data.Linq open System.Data.Entity open Microsoft.FSharp.Data.TypeProvidersPour exécuter le code dans cette procédure pas - à - pas en mode interactif comme script et non comme programme compilé, ouvrez le menu contextuel du nœud de projet, choisissez Ajouter un nouvel élément, ajoutez un fichier de script F#, puis ajoutez le code dans chaque étape du script.Pour charger les références d'assembly, ajoutez les lignes suivantes.
#r "System.Data.Entity.dll" #r "FSharp.Data.TypeProviders.dll" #r "System.Data.Linq.dll"Mettez en surbrillance chaque bloc de code au fur et à mesure que vous l'ajoutez, puis appuyez sur ALT + Entrée pour l'exécuter dans F# interactive.
Configurez le fournisseur de type, puis connectez -vous à l'Entity Data Model
Dans cette étape, vous configurez un fournisseur de type avec une connexion de données et obtenez un contexte de données qui vous permet d'utiliser des données.
Configurez le fournisseur de type, puis connectez -vous à l'Entity Data Model
Entrez le code suivant pour configurer le fournisseur de type SqlEntityConnection qui génère des types F# sur l'Entity Data Model que vous avez créé précédemment.Au lieu de la chaîne de connexion complète d'EDMX, utilisez uniquement la chaîne de connexion SQL.
type private EntityConnection = SqlEntityConnection<ConnectionString="Server=SERVER\InstanceName;Initial Catalog=School;Integrated Security=SSPI;MultipleActiveResultSets=true", Pluralize = true> >Cette action a installé un fournisseur de type avec la connexion de base de données que vous avez créée précédemment.La propriété MultipleActiveResultSets est nécessaire lorsque vous utilisez ADO.NET Entity Framework car cette propriété fournit plusieurs commandes à exécuter de façon asynchrone sur la base de données dans une connexion, qui peut se produire fréquemment dans le code ADO.NET Entity Framework.Pour plus d'informations, consultez plusieurs jeux de résultats actifs (MARS).
Obtenez le contexte de données, qui est un objet qui contient les tables de base de données en tant que propriétés et des procédures stockées et des fonctions de base de données en tant que méthodes.
let context = EntityConnection.GetDataContext()
Interrogation de la base de données
Dans cette étape, vous utilisez des expressions de requête F# pour exécuter des requêtes sur la base de données.
Pour interroger les données
Entrez le code suivant pour interroger les données de l'Entity Data Model.Notez l'effet de Pluralize = true, qui modifie la table de base de données Course en Courses et Person par People.
query { for course in context.Courses do select course } |> Seq.iter (fun course -> printfn "%s" course.Title) query { for person in context.People 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 dept in context.Departments on (course.DepartmentID = dept.DepartmentID) select (course, dept.Name) } |> Seq.iter (fun (course, deptName) -> printfn "%s %s" course.Title deptName)
Mise à jour de la base de données
Pour mettre à jour la base de données, vous utilisez les classes et les méthodes Entity Framework.Vous pouvez utiliser le contexte de deux types de données avec le type de fournisseur SQLEntityConnection.D'abord, ServiceTypes.SimpleDataContextTypes.EntityContainer est le contexte de données simplifié, qui inclut uniquement les propriétés fournies qui représentent des tables et des colonnes de base de données.Ensuite, le contexte complet de données est une instance de la classe ObjectContextEntity Framework, qui contient la méthode AddObject pour ajouter des lignes à la base de données.L´Entity Framework reconnaît des tables et des relations entre elles, ce qui garantit la cohérence de base de données.
Pour mettre à jour la base de données
Ajoutez le code suivant à votre programme :Dans cet exemple, vous ajoutez deux objets avec une relation entre eux, et vous ajoutez un formateur et une assignation de bureau.Le tableau OfficeAssignments contient la colonne InstructorID , qui référence la colonne PersonID dans le tableau Person .
// The full data context let fullContext = context.DataContext // A helper function. let nullable value = new System.Nullable<_>(value) let addInstructor(lastName, firstName, hireDate, office) = let hireDate = DateTime.Parse(hireDate) let newPerson = new EntityConnection.ServiceTypes.Person(LastName = lastName, FirstName = firstName, HireDate = nullable hireDate) fullContext.AddObject("People", newPerson) let newOffice = new EntityConnection.ServiceTypes.OfficeAssignment(Location = office) fullContext.AddObject("OfficeAssignments", newOffice) fullContext.CommandTimeout <- nullable 1000 fullContext.SaveChanges() |> printfn "Saved changes: %d object(s) modified." addInstructor("Parker", "Darren", "1/1/1998", "41/3720")Rien n'est modifié dans la base de données jusqu'à ce que vous appeliez SaveChanges.
Restaurez maintenant la base de données à son premier état en supprimant les objets que vous avez ajouté.
let deleteInstructor(lastName, firstName) = query { for person in context.People do where (person.FirstName = firstName && person.LastName = lastName) select person } |> Seq.iter (fun person-> query { for officeAssignment in context.OfficeAssignments do where (officeAssignment.Person.PersonID = person.PersonID) select officeAssignment } |> Seq.iter (fun officeAssignment -> fullContext.DeleteObject(officeAssignment)) fullContext.DeleteObject(person)) // The call to SaveChanges should be outside of any iteration on the queries. fullContext.SaveChanges() |> printfn "Saved changed: %d object(s) modified." deleteInstructor("Parker", "Darren")
AttentionLorsque vous utilisez une expression de requête, vous ne devez pas oublier que la requête est sujette à l'évaluation tardive.Par conséquent, la base de données est encore ouverte pour lire pendant les évaluations liées, comme dans les blocs d'expression lambda après chaque expression de requête.Une opération de base de données qui utilise explicitement ou implicitement une transaction doit se produire après que les opérations de lecture se soient terminées.
Étapes suivantes
Explorer d'autres options de requête en examinant les opérateurs de requête disponibles dans Expressions de requête (F#), et examinez également ADO.NET Entity Framework pour comprendre quelles fonctionnalités sont disponibles lorsque vous utilisez ce fournisseur de type.
Voir aussi
Tâches
Procédure pas à pas : génération de types F# à partir d'un fichier de schéma EDMX (F#)
Référence
SqlEntityConnection, fournisseur de type (F#)