TP3 : Ajout d'un modèle 1- L’approche Code First Dans cette section, vous ajouterez quelques classes pour gérer les films dans une base de données. Ces classes vont constituer la partie « modèle » de l'application ASP.NET MVC. Vous allez utiliser la technologie d'accès aux données de .NET Framework appelée l' Entity Framework pour définir et travailler avec ces classes du modèle. Entity Framework (souvent dénommé "EF") prend en charge un modèle de développement appelé Code First. Code First vous permet de créer des objets de modèle en écrivant des classes simples. Ajouter des Classes de modèle Dans l' Explorateur de solutions, faites un clic droit sur le dossier des modèles , sélectionnez Ajouter et puis sélectionnez classe. A.RETBI Environement.Net 2013-2014 Entrez le nom de classe "Movie". Ajoutez les cinq propriétés suivantes à la classe de Movie : using System; namespace MvcMovie.Models { public class Movie { public int ID { get; set; } public string Title { get; set; } public DateTime ReleaseDate { get; set; } public string Genre { get; set; } public decimal Price { get; set; } } } Nous allons utiliser la classe Movie pour représenter des films dans une base de données. Chaque instance d'un objet Movie correspondra à une ligne d'une table de base de données, et chaque propriété de la classe de Movie sera mappé à une colonne dans la table. A.RETBI Environement.Net 2013-2014 Dans le même fichier, ajoutez la classe MovieDBContext suivante : using System; using System.Data.Entity; namespace MvcMovie.Models { public class Movie { public int ID { get; set; } public string Title { get; set; } public DateTime ReleaseDate { get; set; } public string Genre { get; set; } public decimal Price { get; set; } } public class MovieDBContext : DbContext { public DbSet<Movie> Movies { get; set; } } } La classe MovieDBContext représente l’Entity Framework du contexte de base de données « Movie », qui gère la récupération, le stockage et la mise à jour des instances de la classe du Movie dans une base de données. La MovieDBContext dérive de la classe de base de DbContext fournie par Entity Framework. Afin d'être en mesure de référencer les DbContext et DbSet, vous devez ajouter l'instruction using suivante en haut du fichier : using System.Data.Entity; Vous pouvez le faire en ajoutant manuellement à l'aide de l'instruction, ou vous pouvez faites un clic droit sur les lignes ondulées rouges et cliquez sur résoudre et puis cliquez using System.Data.Entity. A.RETBI Environement.Net 2013-2014 A.RETBI Environement.Net 2013-2014 Remarque : Les instructions inutilisées de using peuvent être supprimées. Vous pouvez pour cela faire un clic droit dans le fichier, cliquez sur Organiser les instructions using et puis cliquez sur Remove unused Using Nous avons donc ajouté un modèle (le M dans MVC). Dans la section suivante, vous travaillerez avec la chaîne de connexion de base de données. A.RETBI Environement.Net 2013-2014 Création d'une chaîne de connexion et de travailler avec SQL Server LocalDB La classe MovieDBContext , que vous avez créé gère la tâche de se connecter à la base de données et de mapping des objets Movie aux enregistrements de la base de données. Vous n'avez pas réellement à spécifier quelle base de données à utiliser car l’Entity Framework utilise par défaut LocalDB. Dans cette section, nous allons ajouter explicitement une chaîne de connexion dans le fichier Web.config de l'application. SQL Server Express LocalDB LocalDB est une version allégée du moteur de SQL Server Express Database qui se lance à la demande et s'exécute en mode utilisateur. LocalDB s'exécute dans un mode spécial d'exécution de SQL Server Express qui vous permet de travailler avec des bases de données sous forme de fichiers .mdf . En général, les fichiers de base de données LocalDB sont conservés dans le dossier App_Data , d'un projet web. SQL Server Express n'est pas recommandé pour une utilisation dans les applications web de production. LocalDB en particulier ne devrait pas servir à la production avec une application web parce qu'il n'est pas conçu pour fonctionner avec IIS. Cependant, une base de données LocalDB peut être facilement migrée vers SQL Server ou SQL Azure.Dans Visual Studio 2013 (et en 2012), LocalDB est installé par défaut avec Visual Studio. Par défaut, Entity Framework recherche une chaîne de connexion, le même nom que la classe de contexte de l'objet (MovieDBContext pour ce projet). Ouvrez le fichier racine Web.config application ci-dessous. (Pas le fichier Web.config dans le dossier vues .) A.RETBI Environement.Net 2013-2014 Trouver l'élément <connectionStrings> : A.RETBI Environement.Net 2013-2014 Ajoutez la chaîne de connexion suivante à l'élément <connectionStrings> dans le fichier Web.config . <add name="MovieDBContext" connectionString="DataSource=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;In tegrated Security=True" providerName="System.Data.SqlClient" /> L'exemple suivant montre une partie du fichier Web.config avec la nouvelle chaîne de connexion a ajouté : <connectionStrings> <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-MvcMovie20130603030321.mdf;Initial Catalog=aspnet-MvcMovie-20130603030321;Integrated Security=True" providerName="System.Data.SqlClient" /> <add name="MovieDBContext" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True" providerName="System.Data.SqlClient" /> Les deux chaînes de connexion sont très similaires. La première chaîne de connexion nommée DefaultConnection et est utilisée pour la base de données « Membership » pour contrôler qui peut accéder à l'application. Vous avez ajouté la chaîne de connexion spécifique à une base de données LocalDB nommé Movie.mdf situé dans le dossier App_Data . A.RETBI Environement.Net 2013-2014 Le nom de la chaîne de connexion doit correspondre au nom de la classe DbContext . using System; using System.Data.Entity; namespace MvcMovie.Models { public class Movie { public int ID { get; set; } public string Title { get; set; } public DateTime ReleaseDate { get; set; } public string Genre { get; set; } public decimal Price { get; set; } } public class MovieDBContext : DbContext { public DbSet<Movie> Movies { get; set; } } } Si vous ne spécifiez aucune chaîne de connexion, l’ Entity Framework créera une base de données LocalDB dans le répertoire utilisateurs avec le nom qualifié complet de la classe de DbContext (dans ce cas MvcMovie.Models.MovieDBContext). Vous pouvez nommer la base de données, aussi longtemps qu'elle a le suffixe .MDF. Par exemple, nous pourrions nommer la base de données MyFilms.mdf. 2- L’approche Database First 1. Créer une base de données Nous allons créer en premier lieu une nouvelle base de données. Allons-y et générons la base de données. A.RETBI Ouvrez Visual Studio Affichage -> Explorateur de serveurs Cliquez avec le bouton droit sur connexions de données-> Ajouter une connexion... Environement.Net 2013-2014 Si vous n'avez pas connecté l'Explorateur de serveurs à une base de données avant , vous devrez sélectionner Microsoft SQL Server comme source de données Se connecter à SQL Express LocalDb ((localdb) \v11.0) et donnez DatabaseFirst.Blogging comme nom de base de données A.RETBI Environement.Net 2013-2014 A.RETBI Choisissez OK et il vous demandera si vous voulez créer une nouvelle base de données, sélectionnez Oui Environement.Net 2013-2014 La nouvelle base de données apparaît dans l'Explorateur de serveurs, faites un clic droit dessus et sélectionnez Nouvelle requête Copiez le code SQL suivant dans la nouvelle requête, puis faites un clic droit sur la requête et sélectionnez Execute 1. CREATE TABLE [dbo].[Blogs] ( 2. [BlogId] INT IDENTITY (1, 1) NOT NULL, 3. [Name] NVARCHAR (200) NULL, 4. [Url] NVARCHAR (200) NULL, 5. CONSTRAINT [PK_dbo.Blogs] PRIMARY KEY CLUSTERED ([BlogId] ASC) 6. ); 7. 8. CREATE TABLE [dbo].[Posts] ( 9. [PostId] INT IDENTITY (1, 1) NOT NULL, 10. [Title] NVARCHAR (200) NULL, 11. [Content] NTEXT NULL, 12. [BlogId] INT NOT NULL, 13. CONSTRAINT [PK_dbo.Posts] PRIMARY KEY CLUSTERED ([PostId] ASC), 14. CONSTRAINT [FK_dbo.Posts_dbo.Blogs_BlogId] FOREIGN KEY ([BlogId]) REFER ENCES [dbo].[Blogs] ([BlogId]) ON DELETE CASCADE 15. ); 2. Reverse Engineering Model Créer un nouveau projet MVC nommé « DBFirst MVC » qui utilise la base de données pour effectuer des accès aux données : Nous allons utiliser Entity Framework Designer, qui est inclus dans Visual Studio, pour créer notre modèle. A.RETBI App_Data -> ajoute un nouvel élément... Sélectionner des données dans le menu de gauche, puis sur ADO.NET Entity Data Model Entrez BloggingModel comme nom, puis cliquez sur OK Cela lance l' Assistant Entity Data Model Environement.Net 2013-2014 Sélectionnez générer à partir de base de données et cliquez sur suivant Sélectionnez la connexion à la base de données que vous avez créée dans la première section, saisissez BloggingContext comme nom de la chaîne de connexion et cliquez sur A.RETBI Environement.Net 2013-2014 suivant A.RETBI Environement.Net 2013-2014 Cochez la case à cocher de « Tables » pour importer toutes les tables et cliquez sur 'Terminer' Une fois terminé le processus de Reverse Engineering ajoute le nouveau modèle à votre projet et vous permet de le visualiser dans Entity Framework Designer. Un fichier App.config a également été ajouté à votre projet avec les détails de connexion pour la base de données. A.RETBI Environement.Net 2013-2014 Ensuite, nous devons générer du code à partir du modèle pour générer du code qui utilise l'API DbContext, qui a été introduite dans les versions ultérieures d'Entity Framework. Faites un clic droit sur un endroit vide de votre modèle dans le concepteur de l'EF et sélectionnez Ajouter élément de génération de Code. Sélectionnez les Modèles en ligne dans le menu de gauche et de la recherche pour DbContext Sélectionnez l' EF 5.x DbContext générateur en VB, entrez BloggingModel comme nom et cliquez sur Ajouter A.RETBI Environement.Net 2013-2014 Deux nouveaux fichiers seront listés dans l’Explorateur de solution, BloggingModel.Context.tt et BloggingModel.tt qui contiennent le code des classes générés comme indiqué, ci-après : A.RETBI Environement.Net 2013-2014