Spatial : EF Designer

Remarque

EF5 et versions ultérieures uniquement : les fonctionnalités, les API, etc. décrites dans cette page ont été introduites dans Entity Framework 5. Si vous utilisez une version antérieure, certaines ou toutes les informations ne s’appliquent pas.

La vidéo et la procédure pas à pas montrent comment mapper des types spatiaux avec Entity Framework Designer. Il montre également comment utiliser une requête LINQ pour trouver une distance entre deux emplacements.

Cette procédure pas à pas utilise Model First pour créer une base de données, mais EF Designer peut également être utilisé avec le flux de travail Database First pour mapper une base de données existante.

La prise en charge du type spatial a été introduite dans Entity Framework 5. Notez que pour utiliser les nouvelles fonctionnalités telles que le type spatial, les énumérations et les fonctions table, vous devez cibler .NET Framework 4.5. Visual Studio 2012 cible .NET 4.5 par défaut.

Pour utiliser des types de données spatiales, vous devez également utiliser un fournisseur Entity Framework qui a une prise en charge spatiale. Pour plus d’informations, consultez la prise en charge du fournisseur pour les types spatiaux.

Il existe deux types de données spatiales principaux : la géographie et la géométrie. Le type de données géographie stocke les données ellipsoïdales (par exemple, les coordonnées de latitude GPS et de longitude). Le type de données géométrie représente le système de coordonnées Euclidean (plat).

Regardez la vidéo

Cette vidéo montre comment mapper des types spatiaux avec Entity Framework Designer. Il montre également comment utiliser une requête LINQ pour trouver une distance entre deux emplacements.

présenté par: Julia Kornich

Vidéo : WMV | MP4 | WMV (ZIP)

Conditions préalables

Vous devrez installer Visual Studio 2012, Ultimate, Premium, Professionnel ou Web Express Edition pour effectuer cette procédure pas à pas.

Configurer le projet

  1. Ouvrir Visual Studio 2012
  2. Dans le menu Fichier, sélectionnez Nouveau, puis cliquez sur Projet
  3. Dans le volet de gauche, cliquez sur Visual C#, puis sélectionnez le modèle Console
  4. Entrez SpatialEFDesigner comme nom du projet, puis cliquez sur OK

Créer un nouveau modèle avec EF Designer

  1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet, pointez sur Ajouter, puis cliquez sur Nouvel élément
  2. Sélectionnez Données dans le menu de gauche, puis ADO.NET Entity Data Model dans le volet Modèles
  3. Entrez UniversityModel.edmx pour le nom de fichier, puis cliquez sur Ajouter
  4. Dans la page de l’Assistant Entity Data Model, sélectionnez Modèle vide dans la boîte de dialogue Choisir le contenu du modèle
  5. Cliquez sur Terminer

Le Concepteur d'entités, qui fournit une aire de conception permettant de modifier votre modèle, est affiché.

L'assistant exécute les actions suivantes :

  • Génère le fichier EnumTestModel.edmx qui définit le modèle conceptuel, le modèle de stockage et le mappage entre eux. Définit la propriété de traitement des artefacts de métadonnées du fichier .edmx à incorporer dans l’assembly de sortie afin que les fichiers de métadonnées générés soient incorporés dans l’assembly.
  • Ajoute une référence aux assemblys suivants : EntityFramework, System.ComponentModel.DataAnnotations et System.Data.Entity.
  • Crée les fichiers UniversityModel.tt et UniversityModel.Context.tt et les ajoute sous le fichier .edmx. Ces fichiers de modèle T4 génèrent le code qui définit le type dérivé DbContext et les types POCO mappés aux entités du modèle .edmx

Ajouter un nouveau type d’entité

  1. Cliquez avec le bouton droit sur une zone vide de l’aire de conception, puis sélectionnez Ajouter -> Entité. La boîte de dialogue Nouvelle entité s’affiche
  2. Spécifiez Universitypour le nom de type et spécifiezUniversityID pour le nom de la propriété de clé, laissez le type comme Int32
  3. Cliquez sur OK.
  4. Cliquez avec le bouton droit sur l’entité, puis sélectionnez Ajouter nouveau -> Propriété scalaire
  5. Renommez la nouvelle propriété en Name
  6. Ajoutez une autre propriété scalaire et renommez-la à Location, ouvrez la fenêtre Propriétés et remplacez le type de la nouvelle propriété par Geography
  7. Enregistrer le modèle et générer le projet

    Remarque

    Quand vous générez le projet, des avertissements sur les entités et les associations non mappées peuvent s’afficher dans la liste d’erreurs. Vous pouvez ignorer ces avertissements, car après avoir choisi de générer la base de données à partir du modèle, les erreurs disparaîtront.

Générer une base de données à partir du modèle

À présent, nous pouvons générer une base de données basée sur le modèle.

  1. Cliquez avec le bouton droit sur un espace vide sur l’aire du Concepteur d’entités, puis sélectionnez Générer une base de données à partir du modèle
  2. La boîte de dialogue Choisir votre connexion de données de l’Assistant Création d’une base de données s’affiche: cliquez sur le bouton Nouvelle connexion, spécifiez (localdb)\mssqllocaldb pour le nom du serveur et University pour la base de données, puis cliquez sur OK
  3. Dans la boîte de dialogue qui s’affiche pour vous demander si vous souhaitez créer une base de données, cliquez sur Oui.
  4. Cliquez sur Suivant. L’Assistant Création d’une base de données génère alors un script en langage de définition de données (DDL) pour créer une base de données. Le script DDL généré s’affiche dans la boîte de dialogue Résumé et Paramètres. Remarque : le script DDL ne contient pas de définition pour une table qui mappe vers le type d’énumération
  5. Cliquez sur Terminer. Le fait de cliquer sur Terminer n’exécute pas le script DDL.
  6. L’Assistant Création d’une base de données effectue les opérations suivantes : ouvre UniversityModel.edmx.sql dans l’éditeur T-SQL, génère le schéma de magasin et les sections de mappage du fichier EDMX, puis ajoute les informations de chaîne de connexion au fichier App.config
  7. Cliquez sur le bouton droit de la souris dans l’Éditeur T-SQL, puis sélectionnez Exécuter. Dans la boîte de dialogue de connexion au serveur qui s’affiche, entrez les informations de connexion de l’étape 2, puis cliquez sur Se connecter
  8. Pour afficher le schéma généré, cliquez avec le bouton droit sur le nom de la base de données dans l’Explorateur d’objets SQL Server, puis sélectionnez Actualiser

Persister et récupérer des données

Ouvrez le fichier Program.cs où la méthode Main est définie. Collez le code suivant dans la fonction Main.

Le code ajoute deux nouveaux objets University au contexte. Les propriétés spatiales sont initialisées avec la méthode DbGeography.FromText. Le point géographique représenté comme WellKnownText est passé à la méthode. Le code enregistre ensuite les données. Ensuite, la requête LINQ qui retourne un objet University où son emplacement est le plus proche de l’emplacement spécifié, est construit et exécuté.

using (var context = new UniversityModelContainer())
{
    context.Universities.Add(new University()
    {
        Name = "Graphic Design Institute",
        Location = DbGeography.FromText("POINT(-122.336106 47.605049)"),
    });

    context.Universities.Add(new University()
    {
        Name = "School of Fine Art",
        Location = DbGeography.FromText("POINT(-122.335197 47.646711)"),
    });

    context.SaveChanges();

    var myLocation = DbGeography.FromText("POINT(-122.296623 47.640405)");

    var university = (from u in context.Universities
                                orderby u.Location.Distance(myLocation)
                                select u).FirstOrDefault();

    Console.WriteLine(
        "The closest University to you is: {0}.",
        university.Name);
}

Compilez et exécutez l'application. Le programme génère la sortie suivante :

The closest University to you is: School of Fine Art.

Pour afficher les données dans la base de données, cliquez avec le bouton droit sur le nom de la base de données dans l’Explorateur d’objets SQL Server, puis sélectionnez Actualiser. Cliquez ensuite sur le bouton droit de la souris sur le tableau, puis sélectionnez Afficher les données.

Résumé

Dans cette procédure pas à pas, nous avons examiné comment mapper des types spatiaux avec Entity Framework Designer et comment utiliser des types spatiaux dans le code.