TP 2 - Base de Données - Entity Framework
TP 2 - Base de Données - Entity Framework
TP 2 - Base de Données - Entity Framework
Université de Sfax
École Nationale d’Électronique et des Télécommunications de Sfax
Module : ASP.NET II
Objectifs
A. Base de données first
B. Model first
3. Créez une connexion avec la base de données existante « School » (fournie). En créant
un EDM pour une base de données pour la première fois, il faut créer une nouvelle
connexion en cliquant sur le bouton Nouvelle connexion.
1
4. Dans la fenêtre contextuelle Propriétés de connexion, indiquez le nom du serveur
((localdb)\MSSQLLocalDB : Pour la base de données locale), sélectionnez votre nom de
base de données et cliquez sur le bouton OK.
Une chaîne de connexion est ajoutée au fichier « app.config » avec le nom d'entités
<DBname>. Cliquez sur Suivant.
2
5. Choisissez la version d'Entity Framework 6.0 et cliquez sur « Suivant » pour obtenir
un affichage de toutes les tables, vues et procédures stockées (SP) de la base de
données. Sélectionnez les tables, les vues et les SP que vous souhaitez les manipuler et
cliquez sur « Terminer ». Ainsi, un fichier « Produit.edmx »est ajouté au projet.
3
7. EDM ajoute les paramètres du fournisseur et de chaîne de connexion dans le fichier
« App.config ».
Il est possible d’ouvrir le concepteur EDM en XML où sera affiché les trois parties de
l'EDM: schéma conceptuel (CSDL), schéma de stockage (SSDL) et schéma de
mappage (MSL). Cliquez avec le bouton droit sur Produit.edmx puis cliquez sur
« Ouvrir avec ».
4
B. Model first
Dans l'approche Code-First, on se concentre sur le domaine de l’application et on
commence par créer des classes pour l’entité de domaine plutôt que de concevoir la base
de données, puis de créer les classes correspondantes à la conception de la base de
données.
5
3. Création de classes de domaine
Ajoutez dans le répertoire Models, une classe Utilisateur. Chaque utilisateur doit
posséder un identifiant et un prénom.
public class Utilisateur
{
public int Id { get; set; }
public string Prenom { get; set; }
}
Pour manipuler des restaurants, créez la classe Resto avec les attributs suivants: un
identifiant, un nom et un numéro de téléphone :
public class Resto
{
public int Id { get; set; }
public string Nom { get; set; }
public string Telephone { get; set; }
}
Ajoutez la classe « vote » pour qu’un utilisateur puisse choisir un restaurant.
public class Vote
{
public int Id { get; set; }
public virtual Resto Resto { get; set; }
public virtual Utilisateur Utilisateur { get; set; }
}
Ajoutez la classe « Sondage » qui présente la liste de votes pour une date donnée.
public class Sondage
{
public int Id { get; set; }
public DateTime Date { get; set; }
public virtual List<Vote> Votes { get; set; }
}
6
L'approche Model-First nécessite également une classe de contexte qui est dérivée de
la classe DbContext.Créez une classe de contexte qui dérive de la classe DBContext
et expose les propriétés DbSet pour les types que vous souhaitez intégrer au modèle.
Le DbSet est un ensemble de classes d'entités (ou ensemble d'entités).
Créez un contexte permettant d’accéder aux données en déclarant une nouvelle classe
« RestoContext » qui dérive de la classe DbContext.Le point d’entrée de ce contexte
est la liste des sondages et la liste des restaurants. Pour cela, nous utiliserons la
classe DbSet générique comme type de Sondage et des restaurants.
N’oubliez pas d’ajouter l’espace de nom suivant : using System.Data.Entity;
public class RestoContext : DbContext
{
public DbSet<Sondage> Sondages { get; set; }
public DbSet<Resto> Restos { get; set; }
}
5. Accès de données
Ajouter une méthode pour récupérer la liste de tous les restaurants et une méthode
pour créer un nouveau restaurant.Dans le répertoire Models, créez l’interface IDal
public interface IDal : IDisposable
{
void CreerRestaurant(string nom, string telephone);
List<Resto> ObtientTousLesRestaurants();
}
Avec Entity Framework, nous utilisons directement la classe Resto qui est la classe du
modèle que nous avons créé.Créez une classe qui implémente cette interface et qui
permet de lister les différents restaurants enregistrés dans la base et créer de nouveaux
restaurants.On utilise la classe « RestoContext » pour accéder aux différents éléments
de la base de données.
L’objet bdd est instancié dans le constructeur de la DAL et il est par la suite supprimé
en appelant sa méthode Dispose.La méthode SaveChanges permet de sauvegarder les
modifications dans la base de données.
public class Dal : IDal
{
private RestoContext bdd;
public Dal()
7
{
bdd = new RestoContext();
}
public void CreerRestaurant(string nom, string telephone)
{
bdd.Restos.Add(new Resto {Nom=nom,Telephone=telephone });
bdd.SaveChanges();
}
public List<Resto> ObtientTousLesRestaurants()
{
return bdd.Restos.ToList();
}
public void Dispose()
{
bdd.Dispose();
}
}
8
7. Récupérer la base de données
La plateforme .Net (à partir du Visual Studio 2012) dispose par défaut de la base locale
(LocalDb). Par contre, avec Visual Studio 2010, il faut installer Sql Server Express.
9
Pour se connecter à la base locale, allez dans l’explorateur de serveurs et cliquez sur
Connexion à la base de données.
10
Cliquez sur OK, en dépliant l’arborescence, en particulier le répertoire Tables, vous
pourrez voir toutes les tables qui ont été créées par Entity Framework. Elles reflètent
le modèle de données crée.
La table « __MigrationHistory » est une table de migration utilisée par le Model first.
La table Utilisateurs possède un identifiant et un prénom.
La table Sondages possède un identifiant et une date.
La liste de votes associées à notre sondage se trouve dans la table Votes. Le vote possède
un identifiant mais également l’identifiant du resto, de l’utilisateur et d’un sondage. C’est
comme ça que se fait une relation.
Les identifiants sont automatiques, c’est-à-dire auto-incrémentés et uniques. On peut le
voir par exemple en sélectionnant le champ « Id » de la table Utilisateurs.
L’identifiant « id » est « d'identité », cela veut dire qu’il est unique et auto-incrémenté.
L’incrément est de 1.Grâce aux conventions d’Entity Framework, par défaut, si on nomme
unepropriété Id (ou ID) ou NomDeLaClasseId, alors Entity Framework interprète cette
propriété comme une clé primaire de l’entité.
11
10. Testez avec une nouvelle requête
Cliquez droit sur la base de données et choisissez de faire une nouvelle requête.Une
nouvelle fenêtre apparaît qui permet de faire une requête SQL. Pour voir ce qu’il y a
dans la table des restaurants :select * from Restoes
Appuyez sur le petit triangle pour exécuter la requête.
12