CaveAVins Tutoriel 1 : L’accès aux données avec Sql Server et EF Code First

 

 

CaveAVins Tutoriel 1 : L’accès aux données avec Sql Server et EF Code First

  • Comments 4

Voici le premier tutoriel de la série d’articles qui introduit les technologies de développement actuelles, dans le cadre d’un projet de gestion de cave à vins.

Je ne fournirai probablement pas tout le projet en pas à pas de manière exhaustive, mais j’essaierai de le faire pour toutes les parties clés.
Les tutoriels figurent à part des articles classiques pour que les étapes ne soient pas noyées dans la théorie et soient ainsi plus faciles à suivre.
Je vous conseille vivement de lire l’article technique qui replace le tutoriel dans le contexte du projet avant d’attaquer l’implémentation :

  1. Développer un projet aujourd’hui : comment faire, par où commencer ?
  2. Architecture et découpage du projet
  3. Stockage des données avec Sql Server, EF Code First et Azure (article correspondant à ce tutoriel Star)
  4. La publication des données
  5. La migration dans Azure
  6. L’application Windows Phone basique
  7. Ajout de la fonction d’aide à l’achat
  8. Ajout des notifications sur les vins en promotions
  9. L’application Silverlight

Tutoriels:

- CaveAVins Tutoriel 1 : L’accès aux données avec Sql Server et EF Code First (vous êtes ici Star)
- CaveAVins Tutoriel 2 : La publication des données en OData avec WCF Data Services 
- CaveAVins Tutoriel 3 : Migration d’une base SQL Server vers SQL Azure
- CaveAVins Tutoriel 4 : Hébergement du service WCF Data Services dans Azure

Dans ce tutoriel, nous utiliserons Entity Framework Code First pour décrire notre modèle objet de données par code, sous la forme d’objets simples (POCO).
Entity Framework utilisera ces classes pour en déduire une structure de base de données qu’il créera automatiquement dans Sql Server.

Je montrerai volontairement une manière très basique d’utiliser Code First et Entity Framework car le but de cet article n’est pas d’approfondir cette technologie mais de présenter ce qu’elle permet de faire.
Pour approfondir le sujet et aller plus loin : cliquez ici

A la fin de ce tutoriel, nous aurons réalisé une couche de données grâce à une base de données dans Sql Server et son mapping ORM.

image[56]

Light bulbPour faciliter la mise en pratique de ce tutoriel, nous commencerons par mettre en place les données dans Sql Server, pour les faire migrer plus tard dans Sql Azure. Ainsi, nous obtiendrons un projet qui fonctionnera aussi bien On Premises que dans le Cloud. Cela permettra également de montrer la simplicité avec laquelle des solutions existantes peuvent évoluer vers un hébergement Cloud.

 

Téléchargez les sources:

 

Les prérequis

Pour ce tutoriel, vous aurez besoin d’installer :

- Visual Studio 2010 Express, Premium ou Ultimate (pour tester les diagrammes d’architecture, Use Case, …)

- Entity Framework 4.1

- EF Power Tools (CTP 1).

Création de la solution Visual Studio

Démarrez Visual Studio 2010 et créez une nouvelle solution vide que vous appellerez CaveAVins:

image

Ajoutez un projet de type Class Library appelé CaveAVins.Db:

image

Ajoutez une référence vers Entity Framework 4.1:

image

 

Création des classes de données

Avec Entity Code First, on définit directement par code les classes à partir desquelles le moteur de mapping déduira et génèrera la structure de la base de données.

Voici le diagramme des classes que nous allons créer:

image

Ajoutez les classes suivantes au projet:

Fichier Wine.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CaveAVins.Db
{
    public class Wine
    {
        public int WineId { get; set; }
        public string Name { get; set; }
        public int Year { get; set; }
        public string PictureUrl { get; set; }
        public string Address { get; set; }
    }
}

Fichier MyWine.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CaveAVins.Db
{
    public class MyWine
    {
        public int MyWineId { get; set; }
        public string Review { get; set; }
        public int Notation { get; set; }
        public int Count { get; set; }
        public Wine WineInfos { get; set; }
    }
}

Remarquez que les classes sont de simples POCOs et ne possèdent pas d’attributs particuliers. Nous utilisons la convention de nommage par défaut : la propriété de la classe dont le nom est suffixé par “Id” sera interprété comme la clé de la table correspondante dans la base de données.
Il y a différents moyens de configurer le mapping de manière plus avancée, avec des custom attributes ou fluent.

Fichier CaveAVinsContext.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;

namespace CaveAVins.Db
{
    public class CaveAVinsContext : DbContext
    {
        public DbSet<MyWine> Bottles { get; set; }
        public DbSet<Wine> Wines { get; set; }
    }
}

Cette fois, nous utilisons des objets spécifiques à Entity : DbContext et DbSet pour le définition des entités. La classe CaveAVinsContext matérialise le contexte d’accès aux données. La première fois que l’on utilisera le contexte, la base de données sera créée. Pour cela, nous allons ajouter un projet de type Application Console, qui nous servira uniquement à faire un premier accès au contexte pour forcer la création de la base.

Génération de la base de données

Ajoutez un projet de type Application Console:

image

Ajoutez une référence  à Entity Framework 4.1 comme pour le projet précédent, et ajoutez également une référence au projet CaveAVins.Db:
image
Complétez le Main par le code suivant, qui ajoute une ligne dans la table des vins Wines.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;

namespace CaveAVins.Db.Setup
{
    class Program
    {
        static void Main(string[] args)
        {
            Database.SetInitializer<CaveAVinsContext>(new DropCreateDatabaseIfModelChanges<CaveAVinsContext>());

            using (var db = new CaveAVinsContext())
            {
                if(! db.Wines.Any())
                {
                    var wine = new Wine() { Name = "Test" };
                    db.Wines.Add(wine);
                    db.SaveChanges();
                }
            }         
        }
    }
}

Définissez le projet de type console comme projet de démarrage (clic droit sur le projet : Set as Startup Project).
Compilez et exécutez la solution.

La première ligne Database.SetInitializer<CaveAVinsContext>(new DropCreateDatabaseIfModelChanges<CaveAVinsContext>());
permet de supprimer la base de données si elle existe déjà (pour ne pas déclencher d’exception, dans le cas où vous exécuteriez plusieurs fois l’application alors que vous avez modifié la structure des données).

Vérification

Si tout s’est bien déroulé, la base de données a été créée. Pour le vérifier, ajoutez une nouvelle connexion dans l’explorateur de serveurs de Visual Studio:

image

imageimage

Entrez “.\SQLEXPRESS” pour Server Name et choisissez le nom de la base de données CaveAVins.Db.CaveAVinsContext qui devrait apparaitre dans la liste déroulante.

image

Et voici notre base de données ! :

image

Avec notre unique ligne dans la table Wines:

image

 

Pour faciliter la manipulation et la maintenance de votre mapping de type Code First, vous pouvez télécharger les EF Power Tools (CTP 1) accessibles dans l’extension Manager de Visual Studio.

image

Redémarrez Visual Studio et rechargez la solution.

Faites un clic droit sur le fichier CaveAVinsContext.cs, sélectionnez Entity Framework/View Entity Data Model

image

Le modèle objet apparait par dans l’outil de modélisation de Visual Studio Open-mouthed smile.

image

 

Conclusion

Voici notre architecture actuelle:

image56

Téléchargez les sources:

 

La prochaine étape sera la publication des données en OData avec WCF Data Services. Les données seront ainsi accessibles par les applications clientes, ou par des services métiers de plus haut niveau qui pourront être hébergés dans Azure.

Articles:

Tutoriels:

- CaveAVins Tutoriel 1 : L’accès aux données avec Sql Server et EF Code First (vous êtes ici Star)
- CaveAVins Tutoriel 2 : La publication des données en OData avec WCF Data Services
- CaveAVins Tutoriel 3 : Migration d’une base SQL Server vers SQL Azure
- CaveAVins Tutoriel 4 : Hébergement du service WCF Data Services dans Azure

 
Leave a Comment
  • Please add 1 and 1 and type the answer here:
  • Post
  • Belle série! Tu comptes la sortir en bouquin format poche aussi? Non parce que tu es entrain de nous écrire un roman là :-P

  • Bonne idée ! mais format poche c'est un peu limite pour lire le code et pas pratique pour le copier/coller... :p

  • Bonjour et meilleurs voeux,

    trés bon tutorial et projet !!!

    Mais j'ai un souci, je n'arrive pas à voir "Microsoft SQL Server" dans la liste des Data Source ... alors que j'ai installé tout les prérequis dont SQL Server Express 2008 R2 ...

    HELP

    Auriez vous une idée ?

    Merci d'avance

    Cédric

  • Bonjour,

    Pourriez-vous me dire si cette partie du projet Cave à Vins pourrait être mise dans une Portable Class Library plutôt qu'une Class Library ?

    Merci

Page 1 of 1 (4 items)
Page 2 of 4 (85 items) 1234