<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le blog de Hinault Romaric Donfack &#187; WebMatrix</title>
	<atom:link href="https://blog.developpez.com/lilroma/pcategory/net/webmatrix/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/lilroma</link>
	<description>Bienvenue sur ce blog. Vous y trouverez du .NET, du .NET...  encore du .NET, toujours du .NET et très peu de chose sur moi</description>
	<lastBuildDate>Sat, 27 Aug 2016 14:24:30 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>WebMatrix2 disponible en version finale</title>
		<link>https://blog.developpez.com/lilroma/p11314/net/webmatrix2-disponible-en-version-finale</link>
		<comments>https://blog.developpez.com/lilroma/p11314/net/webmatrix2-disponible-en-version-finale#comments</comments>
		<pubDate>Fri, 14 Sep 2012 16:06:48 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[WebMatrix]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/lilroma/?p=87</guid>
		<description><![CDATA[WebMatrix 2 est sorti en version finale après presque un an depuis la publication de la bêta. Il faut dire que pour cette version, Microsoft n&#8217;a pas fait les choses à moitié. WebMatrix 2 apporte un nombre important de nouveautés &#8230; <a href="https://blog.developpez.com/lilroma/p11314/net/webmatrix2-disponible-en-version-finale">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>WebMatrix 2 est sorti en version finale après presque un an depuis la publication de la bêta.</p>
<p>Il faut dire que pour cette version, Microsoft n&rsquo;a pas fait les choses à moitié. </p>
<p>WebMatrix 2 apporte un nombre important de nouveautés dont les fonctionnalités phares sont :</p>
<p> &#8211; une galerie d’extensions et un modèle d’extensibilité pour permettre d’écrire rapidement ses propres plugins et étendre les fonctionnalités de l’EDI ;<br />
 &#8211; une rapidité améliorée pour installer, modifier et publier les applications open source comme Joomla, WordPress, Drupal, DotNetNuke et Umbraco ;<br />
 &#8211; l’intégration de nouveaux modèles de projets pour PHP, Node.js, HTML5 et pour le mobile ;<br />
 &#8211; le support amélioré pour les langages Razor, C#, VB, PHP, Node.js, HTML5, CSS3 et Jquery, avec notamment l’ajout de  l’IntelliSense et l’accès à la documentation pour PHP ;<br />
 &#8211; la possibilité de prévisualiser son site mobile avant publication grâce à des émulateurs pour iPhone, iPad et Windows Phone ;<br />
 &#8211; une interface simple pour installer les composants externes nécessaires pour votre application via NuGet ;<br />
une intégration plus étroite avec la plateforme Cloud Windows Azure ;<br />
 &#8211; la possibilité de télécharger et modifier un fichier depuis le serveur.  </p>
<p> J&rsquo;ai deja redigé un nombre intéressant d&rsquo;articles sur les nouveautés de cette mouture :</p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p11236/net/webmatrix_2_utiliser_l_extension_orangeb" title="WebMatrix 2 : utiliser l’extension OrangeBits pour améliorer le temps de chargement des pages Web">WebMatrix 2 : utiliser l’extension OrangeBits pour améliorer le temps de chargement des pages Web</a></p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10639/net/webmatrix_2_beta_integration_du_gestionn" title="WebMatrix 2 beta : intégration du gestionnaire de packages NuGet et la galerie d’extensions">WebMatrix 2 beta : intégration du gestionnaire de packages NuGet et la galerie d’extensions</a></p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10574/net/webmatrix_2_beta_validation_des_donnees" title="WebMatrix 2 bêta : validation des données utilisateur">WebMatrix 2 bêta : validation des données utilisateur</a></p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10537/net/webmatrix_2_beta_integrer_l_authentifica" title="WebMatrix 2 bêta : intégrer l’authentification Twitter à son site Web">WebMatrix 2 bêta : intégrer l’authentification Twitter à son site Web</a></p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10518/net/webmatrix/webmatrix_2_beta_meilleur_support_de_php" title="WebMatrix 2 bêta : support amélioré pour PHP avec l’IntelliSense">WebMatrix 2 bêta : support amélioré pour PHP avec l’IntelliSense</a></p>
<p>A bientôt pour de nouveaux articles sur l&rsquo;EDI, qui est l&rsquo;un de mes environnements de développement phare. </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebMatrix 2 : utiliser l’extension OrangeBits pour améliorer le temps de chargement des pages Web</title>
		<link>https://blog.developpez.com/lilroma/p11236/net/webmatrix_2_utiliser_l_extension_orangeb</link>
		<comments>https://blog.developpez.com/lilroma/p11236/net/webmatrix_2_utiliser_l_extension_orangeb#comments</comments>
		<pubDate>Tue, 21 Aug 2012 16:35:59 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[WebMatrix]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Lorsque je travaille sur une application Web, quels que soit la taille, le langage et les outils que j’utilise, le temps de chargement de mes pages représente un élément auquel j’accorde beaucoup d’importance. Plus le chargement des pages du site &#8230; <a href="https://blog.developpez.com/lilroma/p11236/net/webmatrix_2_utiliser_l_extension_orangeb">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Lorsque je travaille sur une application Web, quels que soit la taille, le langage et les outils que j’utilise, le temps de chargement de mes pages représente un élément auquel j’accorde beaucoup d’importance. Plus le chargement des pages du site est rapide, plus l’expérience de navigation est fluide et plus les clients sont contents.</p>
<p>Pour améliorer le temps de chargement d’une page, les développeurs ont recours à plusieurs techniques  d’optimisation coté client ou coté serveur dont la mise en cache, l’utilisation d’un CDN ou encore la compression et la minification du CSS et JavaScript.</p>
<p>Dans ce billet de blog, je vais montrer comment vous pouvez grandement améliorer le temps de chargement des pages de votre site Web en minifiant vos fichiers JavaScript et CSS, et en optimisant les images grâce à l’extension OrangeBits.</p>
<p><img src="http://blog.developpez.com/media/minification.png" alt="" title="" /><br />
<span id="more-61"></span></p>
<p>La minification du CSS et JavaScript est un procédé qui permet de réduire  la taille des fichiers  en supprimant les caractères inutiles à l’instar des commentaires, les espaces,  les sauts de lignes, etc.</p>
<p>Pour cet exemple, je vais utiliser le modèle de projet Startet Site. Créez une nouvelle application avec WebMatrix 2. Mon application utilise le fichier JavaScript  « jquery-1.6.2.js ». Lorsque j’exécute mon application avec un outil de mesure de performance comme Yslow, je peux avoir la taille et le nombre de fichiers JavaScript qui sont chargés.</p>
<p><img src="http://blog.developpez.com/media/webmatrixminify3.png" width="591" height="338" alt="" /></p>
<p>Ici, j’ai 3 fichiers JavaScript d’une taille totale de 315.0k, la taille de mon fichier « jquery-1.6.2.js » est de 233Ko. Il est temps pour nous d’installer OrangeBits et l’utiliser pour réduire la taille de ce fichier.</p>
<p>Pour rappel, WebMatrix 2 dispose d’une galerie d’extension qui contient à nos jours plusieurs outils assez intéressants, permettant d’étendre les fonctionnalités de l’EDI. Parmi ces extensions, figure en bonne place OrangeBits pour l’optimisation.</p>
<p><img src="http://blog.developpez.com/media/webmatrixminify1.png" width="630" height="271" alt="" /> </p>
<p>Pour installer l’extension, cliquez sur le bouton Extensions dans la barre d’outils de WebMatrix. La fenêtre de téléchargement, d’installation et de gestion des extensions pour votre EDI s’affiche. Pour son utilisation, vous pouvez vous référer à mon précédent billet de blog sur <a href="http://blog.developpez.com/lilroma/p10639/">l’intégration du gestionnaire de packages .NET NuGet et de la galerie d’extension à WebMatrix 2</a>.</p>
<p><img src="http://blog.developpez.com/media/webmatrixminify2.png" width="707" height="468" alt="" /></p>
<p>Dans la liste des extensions qui vont s’afficher, recherchez OrangeBits Compiler et cliquez sur Installer. Une fenêtre va s’afficher avec les termes de licences concernant l’add-on. Cliquez sur j’accepte pour lancer l’installation de celui-ci.</p>
<p>Vous voilà prêt pour minifier votre fichier. Il suffit juste de le sélectionner, dérouler le menu contextuel et sélectionner minify.</p>
<p><img src="http://blog.developpez.com/media/webmatrixminify4.png" width="379" height="302" alt="" />  </p>
<p>Vous constaterez qu’un fichier « xxxx.min.js » est créé dans le dossier contenant vos fichiers JavaScript ou CSS. Dans votre code, vous allez référencer ce fichier avant de publier votre site ou de mettre celui-ci en production. Pour mon cas, un fichier « « jquery-1.6.2.min.js » a été créé dans mon dossier script. Ce fichier à une taille de 101 Ko (contre 233Ko au début), soit une réduction de plus de 50%.</p>
<p>Il est également possible dans les options, de personnaliser OrangeBits de telle sorte qu’à chaque modification du fichier CSS ou JavaScript, le fichier minifié soit régénéré automatiquement. Vous avez même le choix du dossier dans lequel ce fichier pourra être enregistré.</p>
<p>Pour personnaliser les options d’OrangeBits, il suffit de faire un clic droit au niveau de l’explorateur de fichier et sélectionner la ligne OrangeBits Options. </p>
<p><img src="http://blog.developpez.com/media/webmatrixminify6.png" width="381" height="427" alt="" /> </p>
<p><strong>Optimisation des images</strong></p>
<p>En plus de la minification du JavaScript et CSS, vous pouvez également utiliser OrangeBits pour optimiser les images. Cette option peut être utilisée pour réduire considérablement la taille d’une image. Elle peut permettre de réduire par un facteur de deux la taille d’une image.</p>
<p><img src="http://blog.developpez.com/media/webmatrixminify7.png" width="322" height="314" alt="" /></p>
<p>Avec cet outil, vous avez de quoi réduire le temps de chargement des pages de votre application. WebMatrix 2 apporte une quantité importante de nouvelles fonctionnalités et celui-ci est facilement extensible. Les développeurs indépendants peuvent repousser les limites de l’EDI qui devient de plus en plus un outil vraiment Pro, permettant de faire des choses assez complexes.</p>
<p>En plus de la minification du JavaScript, CSS et l’optimisation des images, OrangeBits peut également être utilisé pour compiler les fichiers CofeeScript, Scss, Sass au sein de WebMatrix.</p>
<p><strong>Sur le même sujet :</strong></p>
<p><img src="http://www.developpez.net/forums/images/smilies/fleche.gif" alt="" title="" /> <a href="http://blog.developpez.com/lilroma/p11221/">WebMatrix 2 : améliorer le temps de chargement des pages Web en utilisant le regroupement et la minification du CSS et JavaScript</a></p>
<p><img src="http://www.developpez.net/forums/images/smilies/fleche.gif" alt="" title="" /> <a href="http://blog.developpez.com/lilroma/p11207/">optimisation du temps de chargement d’une page ASP.NET MVC Part 2 : La mise en cache</a></p>
<p><img src="http://www.developpez.net/forums/images/smilies/fleche.gif" alt="" title="" />  <a href="http://blog.developpez.com/lilroma/p10462/">Microsoft.Web.Optimisation : ou comment optimiser une application ASP.NET en utilisant le regroupement et la minification à la volée du JavaScript et CSS</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>WebMatrix 2 : améliorer le temps de chargement des pages Web en utilisant le regroupement et la minification du CSS et JavaScript</title>
		<link>https://blog.developpez.com/lilroma/p11221/net/webmatrix_2_ameliorer_le_temps_de_charge</link>
		<comments>https://blog.developpez.com/lilroma/p11221/net/webmatrix_2_ameliorer_le_temps_de_charge#comments</comments>
		<pubDate>Wed, 15 Aug 2012 01:57:48 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Lorsque je travaille sur une application Web, quelque soit la taille, le langage et les outils que j’utilise, le temps de chargement de mes pages représente un élément auquel j’accorde beaucoup d’importance. Plus le chargement des pages du site est &#8230; <a href="https://blog.developpez.com/lilroma/p11221/net/webmatrix_2_ameliorer_le_temps_de_charge">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Lorsque je travaille sur une application Web, quelque soit la taille, le langage et les outils que j’utilise, le temps de chargement de mes pages représente un élément auquel j’accorde beaucoup d’importance. Plus le chargement des pages du site est rapide, plus l’expérience de navigation est fluide et plus les clients sont contents.</p>
<p>Pour optimiser le temps le chargement d’une page, on peut avoir recours à plusieurs techniques côté client et côté serveur dont la mise en cache, l’utilisation d’un CDN ou encore la compression et la minification du CSS et JavaScript.</p>
<p>Dans ce billet de blog, je vais montrer comment vous pouvez grandement améliorer le temps de chargement des pages de votre site Web en minifiant et en regroupant vos fichiers JavaScript et CSS grâce à la bibliothèque ASP. NET Optimization &#8211; Bundling.</p>
<p><img src="http://blog.developpez.com/media/minification.png" alt="" title="" /></p>
<p><span id="more-60"></span></p>
<p>Le regroupement et la minification sont des procédés de réduction de la taille des fichiers en les combinant, et en supprimant les espaces et autres caractères inutiles. Ces méthodes permettent de rendre l’exécution d’une page Web plus rapide avec le moins de demandes de chargement des fichiers.</p>
<p>Pour commencer, vous allez créer une nouvelle application ASP.NET WebPages avec WebMatrix en utilisant le modèle de projet Starter Site. </p>
<p>Comme l’illustre l’image ci-dessous, vous constatez que votre application contient par défaut un nombre déjà assez important de fichiers JavaScript et CSS.</p>
<p><img src="http://blog.developpez.com/media/Webmatrixbundle1_01.PNG" width="528" height="352" alt="" /></p>
<p>Si vous exécutez votre application et que vous analysez les performances de votre page d’index avec un outil comme Yslow, vous obtenez le résultat suivant :</p>
<p><img src="http://blog.developpez.com/media/Webmatrixbundle2.PNG" width="680" height="349" alt="" /></p>
<p><strong>Ajout de la bibliothèque ASP.NET Optimization &#8211; Bundling</strong></p>
<p>WebMatrix 2 apporte comme nouveauté phare l’intégration du gestionnaire de packages open source .NET NuGet. Dans la boite à outil de l’EDI, une nouvelle icone NuGet est disponible, permettant d’accéder à l’interface des gestions des packages de votre application. Cliquez sur ce bouton.</p>
<p><img src="http://blog.developpez.com/media/Webmatrixbundle3.jpg" width="267" height="205" alt="" /></p>
<p>L’interface de gestion des packages de NuGet s’affiche. Pour plus de détail sur son utilisation, lire mon article sur <a href="http://blog.developpez.com/lilroma/p10639/">l’intégration du gestionnaire d’extensions et de NuGet dans WebMatrix 2</a>.</p>
<p><img src="http://blog.developpez.com/media/Webmatrixbundle4.PNG" width="699" height="504" alt="" /></p>
<p>Dans la zone de recherche, tapez le nom de la bibliothèque «  Microsoft.Web.Optimization », sélectionnez le package ASP.NET Optimization – Bundling, et cliquez sur Installer. </p>
<p><img src="http://blog.developpez.com/media/Webmatrixbundle5.PNG" width="697" height="268" alt="" /></p>
<p>La fenêtre contenant les termes de la licence va s’afficher. Cliquez sur j’accepte pour lancer l’installation du package dans votre application. A la fin de l’installation, si vous ouvrez le dossier Bin de votre application, vous verrez la présence d’un nouveau fichier Microsoft.Web.Optimization.dll.</p>
<p><strong>Activation du Bundling</strong></p>
<p>Grâce à NuGet, nous avons intégré sans difficulté la bibliothèque dont nous avons besoins dans notre application. Voyons maintenant comment nous pouvons activer le regroupement et la minification du CSS et JavaScript.</p>
<p>Pour cela, ouvrez le fichier _AppStart.cshtml et inserez la ligne de code suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">BundleTable.Bundles.EnableDefaultBundles();</pre>
<p></div>
<p>N’oubliez pas d’ajouter une référence à Microsoft.Web.Optimization.</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">@<span style="color: #0000ff;">using</span> Microsoft.Web.Optimization</pre>
<p></div>
<p>Tous les fichiers JavaScript contenus dans le répertoire Scripts (les sous dossiers ne sont pas pris en compte) de votre application seront regroupés, compressés et traités comme un seul fichier. Ces fichiers seront regroupés par défaut dans un dossier Scripts. Ils seront désormais référencés en utilisant la ligne de code suivante :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">&lt;script src=<span style="color: #006080;">"~/Scripts/js"</span> type=<span style="color: #006080;">"text/javascript"</span>&gt;&lt;/script&gt;</pre>
<p></div>
<p>De même, les fichiers CSS contenus dans le répertoire Content seront également compactés par défaut dans un dossier Content. Ils seront référencés en utilisant la ligne de code suivante :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">&lt;link href=<span style="color: #006080;">"/Content/css"</span> rel=<span style="color: #006080;">"stylesheet"</span> type=<span style="color: #006080;">"text/css"</span> /&gt;</pre>
<p></div>
<p>Après avoir appliqué ces modifications, exécutez à nouveau votre application. Vous allez obtenir  le résultat suivant :</p>
<p><img src="http://blog.developpez.com/media/Webmatrixbundle6.PNG" width="575" height="356" alt="" /></p>
<p>En comparant les deux images, vous vous rendez compte que le nombre de requêtes HTTP sur votre page est passé de 30 à 10.  Les cinq fichiers JavaScript ont été regroupés en 1 fichier et les 16 feuilles de styles ont été combinés en 1 fichier.</p>
<p>De même, la taille des fichiers JavaScript est passée de 558,9 Ko à 375,1 Ko. C’est déjà pas mal. Mais, on aurait pu faire mieux, car plusieurs fichiers dans le dossier Scripts qui ont été regroupés n’ont pas été utilisés. C’est à ce niveau qu’intervient le Bundle personnalisé.</p>
<p><strong>Bundle personnalisé</strong></p>
<p>Avec cette option, vous avez la liberté dans le choix des fichiers qui seront dans un regroupement, ainsi que l’URL qu’aura le regroupement. À ce stade, le choix des dossiers de regroupement doit être fonction de la récurrence des fichiers JavaScript et CSS dans les pages de votre application.<br />
Vous pouvez définir vos regroupements personnalisés en procédant comme suit dans le fichier_çAppStart.cshtml.</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 400px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">BundleTable.Bundles.EnableDefaultBundles();<br /> <br />    var jsBundle = <span style="color: #0000ff">new</span> Bundle(<span style="color: #006080">&quot;~/Scripts&quot;</span>, <span style="color: #0000ff">typeof</span>(JsMinify));<br />    <br />    jsBundle.AddFile(<span style="color: #006080">&quot;~/Scripts/jquery-1.6.2.min.js&quot;</span>);<br />    jsBundle.AddFile(<span style="color: #006080">&quot;~/Scripts/jquery-ui-1.8.11.js&quot;</span>);<br />    jsBundle.AddFile(<span style="color: #006080">&quot;~/Scripts/modernizr-2.0.6-development-only.js&quot;</span>);<br />   <br /> <br />    BundleTable.Bundles.Add(jsBundle);<br /> <br />    Bundle cssBundle = <span style="color: #0000ff">new</span> Bundle(<span style="color: #006080">&quot;~/Styles&quot;</span>, <span style="color: #0000ff">typeof</span>(CssMinify));<br />    cssBundle.AddFile(<span style="color: #006080">&quot;~/content/site.css&quot;</span>);<br />    cssBundle.AddFile(<span style="color: #006080">&quot;~/content/themes/base/jquery.ui.all.css&quot;</span>);<br /> <br />    BundleTable.Bundles.Add(cssBundle); </pre>
<p></div>
<p>Vous allez désormais référencer ces regroupements dans votre page comme suit :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">&lt;link href=<span style="color: #006080;">"~/Styles"</span> rel=<span style="color: #006080;">"stylesheet"</span> type=<span style="color: #006080;">"text/css"</span> /&gt;<br />&lt;script src=<span style="color: #006080;">"~/Scripts"</span> type=<span style="color: #006080;">"text/javascript"</span>&gt;&lt;/script&gt;  </pre>
<p></div>
<p>En exécutant la page précédente de votre application, vous obtenez le résultat suivant :</p>
<p><img src="http://blog.developpez.com/media/Webmatrixbundle7.png" width="565" height="313" alt="" /> </p>
<p>Et voilà, la taille de vos fichiers JavaScript passe de 558,9K à 5,7K, soit un taux de compression de près de 98 %.<br />
Vous pouvez également ajouter à votre regroupement tous les fichiers JavaScript d’un répertoire précis en procédant comme suit :</p>
<p>Et voilà, vous pouvez désormais améliorer assez simplement le temps de chargement des pages de votre application JavaScript grâce à la bibliothèque ASP. NET Optimization – Bundling.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WebMatrix 2 RC disponible</title>
		<link>https://blog.developpez.com/lilroma/p11100/net/webmatrix_2_rc_disponible</link>
		<comments>https://blog.developpez.com/lilroma/p11100/net/webmatrix_2_rc_disponible#comments</comments>
		<pubDate>Mon, 18 Jun 2012 01:12:04 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans la foulée des sorties de Visual Studio 2012 RC, Windows 8 Preview et le nouveau Windows Azure, Microsoft a également publié la Release Candidate de WebMatrix 2. Pour rappel, WebMatrix est un environnement de développement Web léger « tout-en-un &#8230; <a href="https://blog.developpez.com/lilroma/p11100/net/webmatrix_2_rc_disponible">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Dans la foulée des sorties de Visual Studio 2012 RC, Windows 8 Preview et le nouveau Windows Azure, Microsoft a également publié la Release Candidate de WebMatrix 2.</p>
<p>Pour rappel, WebMatrix est un environnement de développement Web léger « tout-en-un », robuste et surtout gratuit, développé par Microsoft. </p>
<p>Cette mouture qui marque une étape importante dans le cycle de développement de l’EDI s’aligne avec la vision de Microsoft : fédérer l’ensemble de la pile Web et des outils dont les développeurs ont besoin pour créer des applications Web au sein d’un outil.</p>
<p><img src="http://blog.developpez.com/media/webmatrixnode.png" width="556" height="292" alt="" /></p>
<p><span id="more-59"></span></p>
<p>WebMatrix 2 RC s’arrime au développement mobile en proposant des outils permettant de mettre sur pied facilement des applications Web Mobiles. Les modèles pour ASP.NET, Node.js et PHP ont été mis à jour pour être plus mieux adaptés pour un affichage sur les terminaux mobiles.  Le rendu des vus spécifiques en fonction des dispositifs (Tablette, iPhone, Windows Phone, etc..) est désormais possible.</p>
<p>L’EDI dispose par défaut des émulateurs allégés pour Windows Phone, iPad et iPhone, permettant d’avoir un aperçu rapide du fonctionnement de son site Web sur ces dispositifs. Des travaux sont en cours pour intégrer encore plus d’émulateurs.</p>
<p>Le support de JQuery Mobile est également au rendez-vous (auto-complexion, etc.). Plusieurs modèles de projets mobiles reposent sur la bibliothèque JavaScript.</p>
<p>La complexion de code pour HTML5, CSS3, JQuery est au menu. L’EDI repose sur la version 2 de WebPages qui dispose d’un nombre assez intéressant d’améliorations par rapport à la version 1.  Le support de Node.js est également au centre de la RC de WebMatrix 2, qui propose de nouveaux modèles de projets, l’IntelliSense pour Node.js et la coloration de code pour Jade/EJS. </p>
<p>WebMatrix 2 RC offre un support encore plus étroit de Windows Azure, la plateforme Cloud de Microsoft.  	  </p>
<p>WebMatrix 2 RC dispose d’un nombre assez impressionnant de nouvelles fonctionnalités par rapport à la bêta. Je viens à peine de commencer à jouer avec ces nouveautés, et je peux dire que je suis déjà assez impressionné et captivé par cet EDI que j’ai adopté depuis la sortie de la première version.<br />
Je reviendrais sur certains de mes billets de blog sur les nouveautés qui auront le plus attiré mon attention au fur et à mesure que je découvrir cette RC de WebMatrix 2.</p>
<p>&#8211; <strong><a href="http://aka.ms/webmatrix2blog">Télécharger WebMatrix 2 RC</a></strong></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[Tutoriel]Création d’une application CRUD avec WebMatrix, Razor et Entity Framework</title>
		<link>https://blog.developpez.com/lilroma/p11023/net/tutoriel_creation_d_une_application_crud</link>
		<comments>https://blog.developpez.com/lilroma/p11023/net/tutoriel_creation_d_une_application_crud#comments</comments>
		<pubDate>Mon, 14 May 2012 10:00:56 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Salut, Les cinq articles de blog qui présentaient pas à pas comment créer une application CRUD avec WebMatrix, Razor et Entity Framework ont été regroupés en un seul tutoriel qui vient d’être publié sur Developpez.com. J&#8217;ai eu à développer récemment &#8230; <a href="https://blog.developpez.com/lilroma/p11023/net/tutoriel_creation_d_une_application_crud">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Salut,</p>
<p> Les cinq articles de blog qui présentaient pas à pas comment créer une application CRUD avec WebMatrix, Razor et Entity Framework ont été regroupés en un seul tutoriel qui vient d’être publié sur Developpez.com.</p>
<blockquote><p>J&rsquo;ai eu à développer récemment une application CRUD avec WebMatrix. Utilisant principalement la classe DataBase de l&rsquo;espace de nom Microsoft.Data pour la manipulation des données, lorsque j&rsquo;ai aperçu Entity Framework dans les packages NuGet avec WebMatrix 2 bêta, je me suis dit &laquo;&nbsp;génial&nbsp;&raquo; ! Ça veut dire que je peux l&rsquo;utiliser dans ma solution.</p>
<p>J&rsquo;ai donc opté pour l&rsquo;utilisation de la bibliothèque au sein de mon application WebMatrix. Entity Framework est en passe de devenir un standard pour la manipulation des données et est recommandé par Microsoft.</p>
<p>Contrairement à Visual Studio et ASP.NET ou l&rsquo;on dispose de plusieurs outils rendant facile la conception d&rsquo;une application CRUD avec Entity Framework, sur WebMatrix, c&rsquo;est un peu compliqué et l&rsquo;on ne dispose pas des fonctionnalités comme l&rsquo;échafaudage, et encore moins des ressources sur Internet.</p>
<p>C&rsquo;est pourquoi j&rsquo;ai décidé de fournir au travers de cet article une démarche pas à pas avec autant de détails que possible pour la conception d&rsquo;une application CRUD avec WebMatrix, Razor et Entity Framework.</p>
<p>Le lecteur, tout au long de ce tutoriel, pourra se familiariser avec WebMatrix, Razor, Entity Framework, le gestionnaire de packages open source .NET NuGet pour WebMatrix et le gestionnaire de base de données SQL Server Compact Edition.</p>
<p>Cet article est essentiellement destiné aux débutants. Aucun prérequis n&rsquo;est donc nécessaire pour sa bonne compréhension. Il est néanmoins préférable d&rsquo;avoir des connaissances de base en programmation orientée objet avec C# et d&rsquo;être familiarisé avec WebMatrix et Razor. Si ce n&rsquo;est pas le cas, je vous conseille de lire dans un premier temps mon tutoriel de présentation de WebMatrix, ainsi que mon tutoriel sur Razor.</p></blockquote>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/">Consulter le tutoriel complet</a></p>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/webmatrixcrudapp.pdf">Télécharger la version PDF</a></p>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/webmatrixcrudapp.zip">Télécharger la version hors-ligne</a></p>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/webmatrixcrudapp-ebooks.zip">Télécharger la version eBook</a></p>
<p> &#8211; Télécharger le code source de l&rsquo;application d&rsquo;exemple :</p>
<p>          . <img src="http://www.developpez.be/images/kitsrc.jpg" alt="" title="" /> <a href="ftp://ftp-developpez.com/rdonfack/WebMatrixCrudApp.rar">Version RAR</a></p>
<p>          . <img src="http://www.developpez.be/images/kitsrc.jpg" alt="" title="" /> <a href="ftp://ftp-developpez.com/rdonfack/WebMatrixCrudApp.zip">Version ZIP</a></p>
<p>&#8211; <a href="http://www.developpez.net/forums/showthread.php?t=1214877">Pour les commentaires c&rsquo;est par ici </a></p>
<p><strong>Bonne lecture</strong> <img src="https://blog.developpez.com/lilroma/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Création d’une application CRUD avec WebMatrix, Razor et Entity Framework Part 3 : création du DBContext et du Repository</title>
		<link>https://blog.developpez.com/lilroma/p10896/net/creation_d_une_application_crud_avec_web_2</link>
		<comments>https://blog.developpez.com/lilroma/p10896/net/creation_d_une_application_crud_avec_web_2#comments</comments>
		<pubDate>Sat, 31 Mar 2012 10:33:30 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&#8217;une application CRUD avec WebMatrix, Razor et Entity Framework. &#8211; Part 1 : introduction et présentation des outils &#8211; Part 2 : création de l&#8217;application &#8230; <a href="https://blog.developpez.com/lilroma/p10896/net/creation_d_une_application_crud_avec_web_2">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&rsquo;une application CRUD avec WebMatrix, Razor et Entity Framework.</p>
<p> &#8211; Part 1 : <a href="http://blog.developpez.com/lilroma/p10870/">introduction et présentation des outils</a></p>
<p> &#8211; Part 2 : <a href="http://blog.developpez.com/lilroma/p10876/">création de l&rsquo;application et définition du modèle objet</a></p>
<p>Dans les parties précédentes, nous nous sommes familiarisés avec les outils que nous allons utiliser, et nous avons par la suite procédé à la création de l’application et à la définition du modèle objet qui sera utilisé.</p>
<p>Cette partie portera sur la création du DbContext, la définition de la chaine de connexion dans le fichier Web.Config, la création de la base de données à partir du modèle objet et afin la définition du Repository qui sera utilisé.</p>
<p><span id="more-55"></span></p>
<p><strong>Création du DBContex</strong></p>
<p>Nous allons maintenant créer la classe qui va s’occuper de gérer la communication entre les classes entités et la base de données.  Cette classe va hériter de la classe DbContext.</p>
<p>La classe DbContext expose les fonctionnalités les plus couramment utilisées pour interroger et puis utiliser les données d’entité en tant qu’objet.</p>
<p>Vous allez ajouter au dossier App_Code un nouveau fichier de classe  ayant pour nom « WebMatrixCrudApp.Context.cs ».</p>
<p>Dans ce fichier, vous allez ajouter une nouvelle classe « WebMatrixCrudAppContext » qui hérite de DbContext.</p>
<p>Cette classe doit contenir trois attributs DbSet fortement typés correspondants à vos différentes entités.  Les attributs DbSet vont permettre de gérer la correspondance avec les tables de la base de données.</p>
<p>Dans ce fichier, vous aurez le code suivant :</p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">using</span> System;<br /><span style="color: #0000ff">using</span> System.Data.Entity;<br /><br /><span style="color: #008000">/// &lt;summary&gt;</span><br /><span style="color: #008000">/// Summary description for ClassName</span><br /><span style="color: #008000">/// &lt;/summary&gt;</span><br /><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> WebMatrixCrudAppContext : DbContext <br />{<br />    <span style="color: #0000ff">public</span> DbSet&lt;Personne&gt; Personnes { get; set; }<br />    <span style="color: #0000ff">public</span> DbSet&lt;Organisme&gt; Organismes {get; set; }<br />    <span style="color: #0000ff">public</span> DbSet&lt;Affiliation&gt; Affiliations {get; set; }<br />    <br />}<br /></pre>
<p></div>
<p>La prochaine étape sera l’ajout de la chaine de connexion pour le mode Code First d’Entity Framework dans le fichier Web.config.</p>
<p>Pour cela, doublez cliquez sur le fichier Web.config dans l’explorateur de solution et ajoutez les lignes de code suivantes à celui-ci :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">connectionStrings&gt;<br />        &lt;add name=<span style="color: #006080;">"WebMatrixCrudAppContext"</span> connectionString=<span style="color: #006080;">"Data Source=|DataDirectory|WebMatrixCrudApp.sdf"</span> <br />             providerName=<span style="color: #006080;">"System.Data.SqlServerCe.4.0"</span> /&gt;<br />    &lt;/connectionStrings&gt;</pre>
<p></div>
<p>Le nom de la chaîne de connexion doit être celui de votre classe DbContext (WebMatrixCrudAppContext) </p>
<p>Le fichier XML de configuration de votre application doit ressembler à ceci :</p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">&lt;?xml version=<span style="color: #006080">&quot;1.0&quot;</span> encoding=<span style="color: #006080">&quot;utf-8&quot;</span>?&gt;<br />&lt;configuration&gt;<br />  &lt;system.web&gt;<br />    &lt;compilation&gt;<br />      &lt;assemblies&gt;<br />        &lt;add assembly=<span style="color: #006080">&quot;System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot;</span> /&gt;<br />      &lt;add assembly=<span style="color: #006080">&quot;System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&quot;</span> /&gt;&lt;/assemblies&gt;<br />    &lt;/compilation&gt;<br />  &lt;/system.web&gt;<br />    &lt;connectionStrings&gt;<br />        &lt;add name=<span style="color: #006080">&quot;WebMatrixCrudAppContext&quot;</span> connectionString=<span style="color: #006080">&quot;Data Source=|DataDirectory|WebMatrixCrudApp.sdf&quot;</span> <br />             providerName=<span style="color: #006080">&quot;System.Data.SqlServerCe.4.0&quot;</span> /&gt;<br />    &lt;/connectionStrings&gt;<br />&lt;/configuration&gt;<br /></pre>
<p></div>
<p>Procédez à l’exécution de votre application en cliquant sur le bouton « Run » et sélectionnez le navigateur de votre choix dans la boite d’outils.</p>
<p>La base de données SQL Server Compact « WebMatrixCrudApp.sdf » sera automatiquement créée dans le dossier App_data de votre application.</p>
<p>En sélectionnant l’espace de données Databases, vous pouvez constater qu’une nouvelle base de données a été ajoutée à votre application. </p>
<p><img src="http://blog.developpez.com/media/createdatabase.PNG" width="827" height="549" alt="" /></p>
<p>En observant cette base de données, vous vous  rendez compte que les tables qui ont été créées correspondent aux propriétés DbSet de la  classe WebMatrixCrudAppContext.<br />
On remarque également que la taille des colonnes Nom et Prenom par exemple de la table Personnes  est la même que celle que vous avez défini dans la classe Personne avec l’attribut [MaxLengthAttribute(50)]</p>
<p>En sélectionnant la table Affiliations et en cliquant sur la commande View de la zone Relationships, vous constatez également que les relations de clés étrangères qui ont été définies pour la classe Affiliation ont été créées.</p>
<p><img src="http://blog.developpez.com/media/RelationShips.PNG" width="826" height="548" alt="" /></p>
<p>En cliquant par exemple sur la relation Affiliation_Organisme, vous obtenez le résultat suivant :</p>
<p><img src="http://blog.developpez.com/media/CreateNewRelation.PNG" width="486" height="439" alt="" /></p>
<p>Une table supplémentaire EdmMataData a été ajoutée dans votre base de données. Cette table permet à Entity Framework Code First de savoir si le modèle utilisé pour créer une base de données est le même que celui qui est utilisé pour accéder à cette base de données (avec la version 4.3 d’EF cette table n’est plus créée).</p>
<p>Dans le cas au vous apportez des modifications à votre modèle objet,  lors de l’exécution de l’application une exception sera levée.</p>
<p>Pour corriger cela,  vous allez ajouter les lignes de code suivantes dans le fichier _AppStart qui se trouve à la racine de votre application :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">@<span style="color: #0000ff;">using</span> DB = System.Data.Entity;<br />@{<br />  <br />    DB.Database.SetInitializer(<span style="color: #0000ff;">new</span> DB.DropCreateDatabaseIfModelChanges&lt;WebMatrixCrudAppContext&gt;());<br />}</pre>
<p></div>
<p>En cas de modification du modèle objet lors de l’exécution de l’application, ces lignes de code vont permettre de régénérer la base de données qui correspondra au nouveau modèle.</p>
<p>Attention, la base de données sera recréée à nouveau, donc toutes les données présentes dans celle-ci seront perdues.</p>
<p><strong>Création d’un Repository</strong></p>
<p>Les bonnes pratiques de développement avec Entity Framework recommandent l’utilisation d’un Repository pour les opérations CRUD. Le Repository permet de créer une couche d’abstraction entre la couche d’accès aux données et la logique métier de l’application, et éviter ainsi une dépendance entre la base de données et la logique métier.</p>
<p>Le code du Repository permettant d’effectuer des opérations CRUD sur l’entité Personne est le suivant :</p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">using</span> System;<br /><span style="color: #0000ff">using</span> System.Collections.Generic;<br /><span style="color: #0000ff">using</span> System.Data;<br /><span style="color: #0000ff">using</span> System.Data.Entity;<br /><span style="color: #0000ff">using</span> System.Web;<br /><br /><span style="color: #008000">/// &lt;summary&gt;</span><br /><span style="color: #008000">/// Summary description for ClassName</span><br /><span style="color: #008000">/// &lt;/summary&gt;</span><br /><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> PersonneRepository<br />{<br />    <span style="color: #0000ff">private</span> WebMatrixCrudAppContext _context = <span style="color: #0000ff">new</span> WebMatrixCrudAppContext();<br /><br />    <span style="color: #0000ff">public</span> Personne Find(<span style="color: #0000ff">int</span> id)<br />    {<br />        <span style="color: #0000ff">return</span> _context.Personnes.Find(id);<br />    }<br /><br />    <span style="color: #0000ff">public</span> List&lt;Personne&gt; GetAll()<br />    {<br />       <span style="color: #0000ff">return</span> _context.Personnes.ToList();<br /><br />    } <br /><br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Add(Personne personne)<br /><br />    {<br />        _context.Personnes.Add(personne);<br />       _context.SaveChanges();<br />    }<br /><br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Delette(Personne  personne)<br />    {<br />       _context.Personnes.Remove(personne);<br />       _context.SaveChanges();<br />    }<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Update(Personne personne)<br />    {<br />      _context.Entry(personne).State = EntityState.Modified;<br />      _context.SaveChanges();<br />    <br />    }<br /><br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Remove(Personne personne)<br />    {<br />      _context.Personnes.Remove(personne);<br />      _context.SaveChanges();<br />    }<br />}</pre>
<p></div>
<p>Ce code doit être ajouté dans un fichier PersonneRepository.cs dans le dossier App_Code. Créez de même les Repository pour les entités Organisme et Affiliation respectivement dans les fichiers OrganismeRepository.cs et AffiliationRepository.cs.<br />
La fonction Find() pour AffiliationRepository doit prendre deux valeurs en paramètre. Le code doit ressembler à ceci :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">public</span> Affiliation Find(<span style="color: #0000ff;">int</span> personneId, <span style="color: #0000ff;">int</span> organismeId)<br />    {<br />        <span style="color: #0000ff;">return</span> _context.Affiliations.Find(personneId, organismeId);<br />    }</pre>
<p></div>
<p>La partie suivante portera sur l’implémentation des fonctionnalités CRUD pour nos différentes tables.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Création d’une application CRUD avec WebMatrix, Razor et Entity Framework Part 5 : implémentation des fonctionnalités CRUD, cas d&#8217;une table associative</title>
		<link>https://blog.developpez.com/lilroma/p10993/net/creation_d_une_application_crud_avec_web_4</link>
		<comments>https://blog.developpez.com/lilroma/p10993/net/creation_d_une_application_crud_avec_web_4#comments</comments>
		<pubDate>Sat, 28 Apr 2012 11:25:30 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&#8217;une application CRUD avec WebMatrix, Razor et Entity Framework. &#8211; Part 1 : introduction et présentation des outils &#8211; Part 2 : création de l&#8217;application &#8230; <a href="https://blog.developpez.com/lilroma/p10993/net/creation_d_une_application_crud_avec_web_4">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&rsquo;une application CRUD avec WebMatrix, Razor et Entity Framework.</p>
<p>&#8211; Part 1 : <a href="http://blog.developpez.com/lilroma/p10870/">introduction et présentation des outils</a></p>
<p>&#8211; Part 2 : <a href="http://blog.developpez.com/lilroma/p10876/">création de l&rsquo;application et définition du modèle objet</a></p>
<p>&#8211; Part 3 : <a href="http://blog.developpez.com/lilroma/p10896/">création du DBContex et du Repository</a></p>
<p>&#8211; Part 4 : <a href="http://blog.developpez.com/lilroma/p10980/">implémentation des fonctionnalités CRUD</a></p>
<p>Dans cette cinquième et dernière partie de notre tutoriel sur la création d&rsquo;une application CRUD avec WebMatrix, Razor et Entity Framework, nous verrons comment implémenter les interfaces Web pour la lecture, la modification, la suppression et l&rsquo;enregistrement des données pour une table associative.</p>
<p><span id="more-57"></span></p>
<p>La table Affiliations étant une table association, quelques modifications seront donc nécessaires au code utilisé pour Personne et Organisme.</p>
<p><strong>1 &#8211; Implémentation de la grille</strong></p>
<p>Dans le dossier Affiliations, ajoutez un nouveau fichier Index.cshtml.</p>
<p>Dans ce fichier, ajoutez les lignes de code suivantes, qui vont permettre d&rsquo;afficher dans cette page la liste des affiliations qui ont été enregistrées dans la base de données :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 1200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">@{<br />    <span style="color: #008000">/// Définition du layout et du titre de la page</span><br />    Layout = <span style="color: #006080">&quot;~/_SiteLayout.cshtml&quot;</span>;<br />    Page.Title = <span style="color: #006080">&quot;Gestion des organismes&quot;</span>;<br />    <span style="color: #008000">//déclaration des variables</span><br />    var af = <span style="color: #0000ff">new</span> AffiliationRepository();<br />   <span style="color: #008000">//déclaration de la grille</span><br />    var grid = <span style="color: #0000ff">new</span> WebGrid(af.GetAll(),rowsPerPage : 10);<br />                  <br />}    <br />&lt;hgroup <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;title&quot;</span>&gt;<br />    &lt;h1&gt;Affiliations.&lt;/h1&gt;<br />&lt;/hgroup&gt;  <br /><br />&lt;p&gt;&lt;a href=<span style="color: #006080">&quot;Create&quot;</span>&gt;Ajouter un nouvel enregistrement&lt;/a&gt;&lt;/p&gt;<br />    @* formatage et affichage de la grille *@<br />        @grid.GetHtml(tableStyle:<span style="color: #006080">&quot;grid&quot;</span>,<br />        headerStyle:<span style="color: #006080">&quot;head&quot;</span>,<br />        alternatingRowStyle: <span style="color: #006080">&quot;altrow&quot;</span>,<br />            columns: grid.Columns(<br />                grid.Column(<span style="color: #006080">&quot;Personne.Nom&quot;</span>,<span style="color: #006080">&quot;Employé&quot;</span>),<br />                grid.Column(<span style="color: #006080">&quot;Organisme.Nom&quot;</span>,<span style="color: #006080">&quot;Organisme&quot;</span>),<br />                grid.Column(<span style="color: #006080">&quot;Fonction&quot;</span>, <span style="color: #006080">&quot;Fonction&quot;</span>),<br />                grid.Column(<span style="color: #006080">&quot;Telephone&quot;</span>, <span style="color: #006080">&quot;Téléphone&quot;</span>),<br /><br />                grid.Column(<span style="color: #006080">&quot;&quot;</span>, <span style="color: #006080">&quot;&quot;</span>, format: @&lt;text&gt;&lt;a href=<span style="color: #006080">&quot;Edit?organismeId=@item.OrganismeId&amp;personneId=@item.PersonneId&quot;</span>)&gt;Editer&lt;/a&gt;<br />                        | &lt;a href=<span style="color: #006080">&quot;Details?organismeId=@item.OrganismeId&amp;personneId=@item.PersonneId&quot;</span>)&gt;Détails&lt;/a&gt;<br />                        | &lt;a href=<span style="color: #006080">&quot;Delete?organismeId=@item.OrganismeId&amp;personneId=@item.PersonneId&quot;</span>)&gt;Supprimer&lt;/a&gt;&lt;/text&gt;)<br />                    )<br />        <br />        )</pre>
<p></div>
<p>Vous remarquez certainement pour les colonnes Employé et Organisme, l&rsquo;affichage des propriétés Personne.Nom et Organisme.Nom. En effet, lors de la définition de l&rsquo;entité Affiliation, vous avez défini les classes Personne et Organisme comme propriétés de l&rsquo;entité. Cela permet à Entity Framework de charger automatiquement dans ces propriétés les données correspondantes aux clés étrangères dans la table Affiliations.</p>
<p>A l&rsquo;exécution de cette page, vous obtenez le résultat suivant :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/listeaffiliations.png" alt="" title="" /></p>
<p><strong>2 &#8211; Affichage détaillé</strong></p>
<p>Dans la page précédente, certaines informations comme l&rsquo;adresse email n&rsquo;ont pas été affichées dans la grille. Pour visualiser ces données, une page d&rsquo;affichage détaillé doit être ajoutée à l&rsquo;application.</p>
<p>Pour ajouter cette page, faites un clic droit sur le dossier Affiliation, sélectionnez l&rsquo;option New File et créez un nouveau fichier Detail.cshtml.</p>
<p>Dans ce fichier, vous allez ajouter les lignes de code suivantes :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 1200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">@{<br />    <br />    Layout = <span style="color: #006080;">"~/_SiteLayout.cshtml"</span>;<br />    Page.Title = <span style="color: #006080;">"Détails"</span>;<br />   <span style="color: #008000;">//Recupération des Id</span><br />    <span style="color: #0000ff;">int</span> personneId = Request[<span style="color: #006080;">"personneId"</span>].AsInt();<br />    <span style="color: #0000ff;">int</span> organismeId = Request[<span style="color: #006080;">"organismeId"</span>].AsInt();<br />    <span style="color: #008000;">//Déclaration des variables</span><br />    var af = <span style="color: #0000ff;">new</span> AffiliationRepository();<br />    var affiliation = <span style="color: #0000ff;">new</span> Affiliation();<br />    <span style="color: #008000;">//Selection de l'élément correspondant aux Id</span><br />   affiliation = af.Find(personneId, organismeId);<br />                  <br />}    <br />&lt;hgroup <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"title"</span>&gt;<br />    &lt;h1&gt;Détails.&lt;/h1&gt;<br />&lt;/hgroup&gt;  <br /> &lt;fieldset&gt;<br />        &lt;legend&gt;&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"employe"</span>&gt;<br />                &lt;label&gt;Employé:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Personne.Prenom @affiliation.Personne.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            <br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"organisme"</span>&gt;<br />                &lt;label&gt;Organisme:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Organisme.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"fonction"</span>&gt;<br />                &lt;label&gt;Fonction:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Fonction&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"email"</span>&gt;<br />                &lt;label&gt;Adresse mail:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Email&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"telephone"</span>&gt;<br />                &lt;label&gt;Téléphone:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Telephone&lt;/label&gt;<br />            &lt;/li&gt;<br />        &lt;/ol&gt; <br />    &lt;/fieldset&gt;<br /><br />&lt;p&gt;&lt;a href=<span style="color: #006080;">"Edit?organismeId=@affiliation.OrganismeId&amp;personneId=@affiliation.PersonneId"</span>&gt;Editer&lt;/a&gt; |<br /> &lt;a href=<span style="color: #006080;">"Index"</span>&gt;Retour à la liste&lt;/a&gt;<br />&lt;/p&gt;</pre>
<p></div>
<p>A l&rsquo;exécution, vous obtiendrez le résultat suivant :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/detailsaffiliations.png" alt="" title="" /></p>
<p><strong>3 &#8211; Enregistrement</strong></p>
<p>Compte tenu du fait que Affiliations est une table association, vous allez dans un premier temps charger dans des listes déroulantes les noms des personnes et des organismes.</p>
<p>Pour cela, dans le fichier Create.cshtml que vous avez ajouté au dossier Affiliation, vous allez insérer les lignes de code suivantes :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><br />    var pr = <span style="color: #0000ff;">new</span> PersonneRepository();<br />    var og = <span style="color: #0000ff;">new</span> OrganismeRepository();<br />   <br />    var personnes = <span style="color: #0000ff;">new</span> List&lt;Personne&gt;();<br />    var organismes = <span style="color: #0000ff;">new</span> List&lt;Organisme&gt;();<br /><br />    personnes = pr.GetAll();<br />    organismes = og.GetAll();</pre>
<p></div>
<p>Une boucle foreach sera utilisée pour charger les données dans une liste déroulante HTML. Le code pour effectuer cela est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">&lt;select id=<span style="color: #006080;">"personneId"</span> name=<span style="color: #006080;">"personneId"</span>&gt;<br />                    @<span style="color: #0000ff;">foreach</span>(var p <span style="color: #0000ff;">in</span> personnes){<br />                    &lt;option <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"@p.PersonneId"</span>&gt;@p.Nom&lt;/option&gt;<br />                    }<br />                &lt;/select&gt;</pre>
<p></div>
<p>En plus de la validation des champs, une vérification doit être effectuée pour éviter les contraintes de validation des clés. Le code pour cela est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">if</span> (db.Affiliations.Find(personneId, organismeId) != <span style="color: #0000ff;">null</span>)<br />            { <br />                <br />                <span style="color: #008000;">//Ajout d'un message d'erreur si les Id existent déjà dans la table affiliations</span><br />                 ModelState.AddError(<span style="color: #006080;">"personneId"</span>,<span style="color: #006080;">"Cet enregistrement existe déjà dans la base de données"</span>);<br />            }</pre>
<p></div>
<p>Le code complet de la page Create.cshtml est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 2200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">@{<br />   <span style="color: #008000">// Définition du layout et du titre de la page</span><br />    Layout = <span style="color: #006080">&quot;~/_SiteLayout.cshtml&quot;</span>;<br />    Page.Title = <span style="color: #006080">&quot;Enregistrement d'un organisme&quot;</span>;<br /><br />    <span style="color: #008000">// initialisation des variables</span><br />    var fonction = <span style="color: #006080">&quot;&quot;</span>;<br />    var email = <span style="color: #006080">&quot;&quot;</span>;<br />    var telephone = <span style="color: #006080">&quot;&quot;</span>;<br />    <span style="color: #008000">//Lecture des données sur les personnes et les organismes</span><br />    var pr = <span style="color: #0000ff">new</span> PersonneRepository();<br />    var og = <span style="color: #0000ff">new</span> OrganismeRepository();<br />    var af = <span style="color: #0000ff">new</span> AffiliationRepository();<br /><br />   <br />    var personnes = <span style="color: #0000ff">new</span> List&lt;Personne&gt;();<br />    var organismes = <span style="color: #0000ff">new</span> List&lt;Organisme&gt;();<br /><br />    personnes = pr.GetAll();<br />    organismes = og.GetAll(); <br /><br /><br />     <span style="color: #008000">// Ajout des scripts de validation</span><br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery-1.6.2.min.js&quot;</span>);<br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.min.js&quot;</span>);<br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.unobtrusive.min.js&quot;</span>);<br /><br />    <span style="color: #008000">// Validation de la fonction</span><br />    Validation.RequireField(<span style="color: #006080">&quot;fonction&quot;</span>, <span style="color: #006080">&quot;La fonction est obligatoire.&quot;</span>);<br />    <br />   <br />    <span style="color: #0000ff">if</span> (IsPost) {<br />        <span style="color: #0000ff">int</span> personneId = Request.Form[<span style="color: #006080">&quot;personneId&quot;</span>].AsInt();<br />        <span style="color: #0000ff">int</span> organismeId = Request.Form[<span style="color: #006080">&quot;organismeId&quot;</span>].AsInt();<br />        fonction = Request.Form[<span style="color: #006080">&quot;fonction&quot;</span>];<br />        email = Request.Form[<span style="color: #006080">&quot;email&quot;</span>];<br />        telephone = Request.Form[<span style="color: #006080">&quot;telephone&quot;</span>];<br />        <br />        <span style="color: #0000ff">if</span> (af.Find(personneId, organismeId) != <span style="color: #0000ff">null</span>)<br />            { <br />                <br />                <span style="color: #008000">//Ajout d'un message d'erreur si les Id exitent déjà dans la table affiliations</span><br />                 ModelState.AddError(<span style="color: #006080">&quot;personneId&quot;</span>,<span style="color: #006080">&quot;Cet enregistrement existe déjà dans la base de données&quot;</span>);<br />            }<br />  <br />        <br />        <span style="color: #0000ff">if</span> (Validation.IsValid()) { <br />              <br />            <span style="color: #0000ff">if</span>(ModelState.IsValid) {   <br />                 var affiliation = <span style="color: #0000ff">new</span> Affiliation{<br />                PersonneId = personneId, OrganismeId = organismeId, Fonction = fonction, Email = email, Telephone = telephone };<br />           <br />                 af.Add(affiliation);<br />   <br />                 Response.Redirect(<span style="color: #006080">&quot;Index&quot;</span>);<br />             }<br />             }<br /><br />    };<br />   <br />                  <br />        }    <br />   <br /><br />&lt;hgroup <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;title&quot;</span>&gt;<br />    &lt;h2&gt;Enregistrement d<span style="color: #006080">'une affiliation&lt;/h2&gt;<br />&lt;/hgroup&gt;<br /><br />&lt;form method=&quot;post&quot; action=&quot;&quot;&gt;<br />    @* Notification en cas d'</span>erreur de validation *@<br />    @Html.ValidationSummary(<span style="color: #006080">&quot;Veuillez corriger les erreurs suivantes:&quot;</span>)<br /><br />    &lt;fieldset&gt;<br />        &lt;legend&gt;Formlaire &lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;personneId&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;personneId&quot;</span> &gt;Employé:&lt;/label&gt;<br />                &lt;select id=<span style="color: #006080">&quot;personneId&quot;</span> name=<span style="color: #006080">&quot;personneId&quot;</span>&gt;<br />                    @<span style="color: #0000ff">foreach</span>(var p <span style="color: #0000ff">in</span> personnes){<br />                    &lt;option <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@p.PersonneId&quot;</span>&gt;@p.Nom&lt;/option&gt;<br />                    }<br />                &lt;/select&gt;<br />            &lt;/li&gt;<br />            <br />             &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;organismeId&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;organismeId&quot;</span> &gt;Organisme:&lt;/label&gt;<br />                &lt;select id=<span style="color: #006080">&quot;organismeId&quot;</span> name=<span style="color: #006080">&quot;organismeId&quot;</span>&gt;<br />                    @<span style="color: #0000ff">foreach</span>(var o <span style="color: #0000ff">in</span> organismes){<br />                    &lt;option <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@o.OrganismeId&quot;</span>&gt;@o.Nom&lt;/option&gt;<br />                    }<br />                &lt;/select&gt;<br />            &lt;/li&gt;<br />            <br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;fonction&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;fonction&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;fonction&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Fonction:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;fonction&quot;</span> name=<span style="color: #006080">&quot;fonction&quot;</span> title=<span style="color: #006080">&quot;Fonction&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@fonction&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;fonction&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;fonction&quot;</span>)<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;email&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;email&quot;</span>&gt;Adresse mail:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;email&quot;</span> name=<span style="color: #006080">&quot;email&quot;</span> title=<span style="color: #006080">&quot;Email&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@email&quot;</span> /&gt;<br />             <br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;telephone&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;telephone&quot;</span>&gt;Numéro de téléphone:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;telephone&quot;</span> name=<span style="color: #006080">&quot;telephone&quot;</span> title=<span style="color: #006080">&quot;Téléphone&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@telephone&quot;</span> /&gt;<br />                <br />            &lt;/li&gt;<br />        &lt;/ol&gt;<br />        &lt;input type=<span style="color: #006080">&quot;submit&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;Enregistrer&quot;</span> title=<span style="color: #006080">&quot;Enregistrer&quot;</span> /&gt;<br />        <br />    &lt;/fieldset&gt;<br />&lt;/form&gt;<br />&lt;a href=<span style="color: #006080">&quot;Index&quot;</span>&gt;Retour à la liste&lt;/a&gt;</pre>
<p></div>
<p>A l&rsquo;exécution, vous obtenez le résultat suivant :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/enregaffiliation.png" alt="" title="" /></p>
<p><strong>4 &#8211; Modification</strong></p>
<p>Penchons-nous maintenant sur la page permettant de modifier les informations d&rsquo;une affiliation. Une nouvelle page Edit.cshtml doit être ajoutée dans le dossier Affiliation.</p>
<p>Dans cette page, vous allez dans un premier temps écrire le code permettant de retourner les informations sur la ligne qui doit être modifiée :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">int</span> personneId = Request[<span style="color: #006080;">"personneId"</span>].AsInt();<br />   <span style="color: #0000ff;">int</span> organismeId = Request[<span style="color: #006080;">"organismeId"</span>].AsInt();<br /><br />   <span style="color: #008000;">// initialisation des variables</span><br />   var af = <span style="color: #0000ff;">new</span> AffiliationRepository();<br />   var affiliation = <span style="color: #0000ff;">new</span> Affiliation();<br />   affiliation = af.Find(personneId, organismeId);<br /><br />   var fonction = affiliation.Fonction;<br />   var email = affiliation.Email;<br />   var telephone = affiliation.Telephone;</pre>
<p></div>
<p>Le code permettant de prendre en compte les modifications dans la base de données avec Entity Framework est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">affiliation.Fonction = fonction;<br />affiliation.Email = email;<br />affiliation.Telephone = telephone;<br /><span style="color: #008000;">//Modification de l'affiliation</span><br />af.Update(affiliation);</pre>
<p></div>
<p>Le code complet pour cette page est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 2200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">@<span style="color: #0000ff;">using</span> System.Data<br />@{<br />    <span style="color: #008000;">// Définition du layout et du titre de la page</span><br />    Layout = <span style="color: #006080;">"~/_SiteLayout.cshtml"</span>;<br />    Page.Title = <span style="color: #006080;">"Modification"</span>;<br /><br />   <br />    <span style="color: #0000ff;">int</span> personneId = Request[<span style="color: #006080;">"personneId"</span>].AsInt();<br />    <span style="color: #0000ff;">int</span> organismeId = Request[<span style="color: #006080;">"organismeId"</span>].AsInt();<br /><br />    <span style="color: #008000;">// initialisation des variables</span><br />    var af = <span style="color: #0000ff;">new</span> AffiliationRepository();<br />    var affiliation = <span style="color: #0000ff;">new</span> Affiliation();<br /><br />    affiliation = af.Find(personneId, organismeId);<br /><br />    var fonction = affiliation.Fonction;<br />    var email = affiliation.Email;<br />    var telephone = affiliation.Telephone;<br />   <br />    <span style="color: #008000;">// Ajout des scripts de validation</span><br />    Scripts.Add(<span style="color: #006080;">"~/Scripts/jquery-1.6.2.min.js"</span>);<br />    Scripts.Add(<span style="color: #006080;">"~/Scripts/jquery.validate.min.js"</span>);<br />    Scripts.Add(<span style="color: #006080;">"~/Scripts/jquery.validate.unobtrusive.min.js"</span>);<br /><br />     <span style="color: #008000;">// Validation de la fonction</span><br />    Validation.RequireField(<span style="color: #006080;">"fonction"</span>, <span style="color: #006080;">"La fonction est obligatoire."</span>);<br />   <br /><br />    <span style="color: #0000ff;">if</span> (IsPost) {<br />        fonction = Request.Form[<span style="color: #006080;">"fonction"</span>];<br />        email = Request.Form[<span style="color: #006080;">"email"</span>];<br />        telephone = Request.Form[<span style="color: #006080;">"telephone"</span>];<br />        <br />          <span style="color: #0000ff;">if</span> (Validation.IsValid()) { <br />                <br />                 affiliation.Fonction = fonction;<br />                 affiliation.Email = email;<br />                 affiliation.Telephone = telephone;<br />                 <span style="color: #008000;">//Modification de l'affiliation</span><br />                 af.Update(affiliation);<br /><br />                 Response.Redirect(<span style="color: #006080;">"Index"</span>);<br />                <br />             }<br />    };<br />   <br />                  <br />        }    <br />   <br /><br />&lt;hgroup <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"title"</span>&gt;<br />    &lt;h2&gt;Modification.&lt;/h2&gt;<br />&lt;/hgroup&gt;<br /><br />&lt;form method=<span style="color: #006080;">"post"</span> action=<span style="color: #006080;">""</span>&gt;<br />     @* Notification en cas d'erreur de validation *@<br />    @Html.ValidationSummary(<span style="color: #006080;">"Veuillez corriger les erreurs suivantes:"</span>)<br /><br />    &lt;fieldset&gt;<br />        &lt;legend&gt;&lt;/legend&gt;<br />        &lt;ol&gt;<br />             &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"employe"</span>&gt;<br />                &lt;label&gt;Employé:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Personne.Prenom @affiliation.Personne.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            <br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"organisme"</span>&gt;<br />                &lt;label&gt;Organisme:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Organisme.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            <br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"fonction"</span>&gt;<br />                &lt;label <span style="color: #0000ff;">for</span>=<span style="color: #006080;">"fonction"</span> @<span style="color: #0000ff;">if</span>(!ModelState.IsValidField(<span style="color: #006080;">"fonction"</span>)){&lt;text&gt;<span style="color: #0000ff;">class</span>=<span style="color: #006080;">"error-label"</span>&lt;/text&gt;}&gt;Fonction:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080;">"text"</span> id=<span style="color: #006080;">"fonction"</span> name=<span style="color: #006080;">"fonction"</span> title=<span style="color: #006080;">"Fonction"</span> <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"@fonction"</span> @Validation.GetHtml(<span style="color: #006080;">"fonction"</span>) /&gt;<br />                @* Write any email validation errors to the page *@<br />                @Html.ValidationMessage(<span style="color: #006080;">"fonction"</span>)<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"email"</span>&gt;<br />                &lt;label <span style="color: #0000ff;">for</span>=<span style="color: #006080;">"email"</span>&gt;Adresse mail:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080;">"text"</span> id=<span style="color: #006080;">"email"</span> name=<span style="color: #006080;">"email"</span> title=<span style="color: #006080;">"Email"</span> <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"@email"</span> /&gt;<br />             <br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"telephone"</span>&gt;<br />                &lt;label <span style="color: #0000ff;">for</span>=<span style="color: #006080;">"telephone"</span>&gt;Numéro de téléphone:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080;">"text"</span> id=<span style="color: #006080;">"telephone"</span> name=<span style="color: #006080;">"telephone"</span> title=<span style="color: #006080;">"Téléphone"</span> <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"@telephone"</span> /&gt;<br />                <br />            &lt;/li&gt;<br />        &lt;/ol&gt;<br />        &lt;input type=<span style="color: #006080;">"submit"</span> <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"Modifier"</span> title=<span style="color: #006080;">"Edit"</span> /&gt;<br />        <br />    &lt;/fieldset&gt;<br />&lt;/form&gt;<br />&lt;a href=<span style="color: #006080;">"Index"</span>&gt;Retour à la liste&lt;/a&gt;<br /></pre>
<p></div>
<p>qui produit le résultat suivant à l&rsquo;exécution :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/modifaffiliation.png" alt="" title="" /></p>
<p><strong>5 &#8211; Suppression</strong></p>
<p>Enfin, pour finir avec cette table, vous allez créer la page Delete.cshtml dans le dossier Affiliation.</p>
<p>Le code source de cette page n&rsquo;a rien de particulier et reprend les principes qui ont été utilisés pour implémenter la page de suppression pour la table Personnes.</p>
<p>Le code complet pour cette page est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 1200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">@{<br />    <span style="color: #008000;">// Définition du layout et du titre de la page</span><br />    Layout = <span style="color: #006080;">"~/_SiteLayout.cshtml"</span>;<br />    Page.Title = <span style="color: #006080;">"Suppression"</span>;<br /><br />    <span style="color: #0000ff;">int</span> personneId = Request[<span style="color: #006080;">"personneId"</span>].AsInt();<br />    <span style="color: #0000ff;">int</span> organismeId = Request[<span style="color: #006080;">"organismeId"</span>].AsInt();<br /><br />    var af = <span style="color: #0000ff;">new</span> AffiliationRepository();<br />    var affiliation = <span style="color: #0000ff;">new</span> Affiliation();<br />    <span style="color: #008000;">//Recherche de l'affiliation à supprimerf</span><br />    affiliation = af.Find(personneId, organismeId);<br /><br />    <span style="color: #0000ff;">if</span>(IsPost)<br />    {<br />            <span style="color: #008000;">//Supression de l'enregistrement</span><br />            af.Remove(affiliation);<br />            Response.Redirect(<span style="color: #006080;">"Index"</span>);<br />    }<br />                  <br />}    <br />&lt;hgroup <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"title"</span>&gt;<br />    &lt;h1&gt;Suppression.&lt;/h1&gt;<br />   &lt;h3&gt;Êtes-vous sur de vouloir supprimer cet enregistrement ?&lt;/h3&gt;<br />&lt;/hgroup&gt;  <br /> &lt;fieldset&gt;<br />        &lt;legend&gt;&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"employe"</span>&gt;<br />                &lt;label&gt;Employé:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Personne.Prenom @affiliation.Personne.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            <br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"organisme"</span>&gt;<br />                &lt;label&gt;Organisme:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Organisme.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"fonction"</span>&gt;<br />                &lt;label&gt;Fonction:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Fonction&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"email"</span>&gt;<br />                &lt;label&gt;Adresse mail:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Email&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"telephone"</span>&gt;<br />                &lt;label&gt;Téléphone:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Telephone&lt;/label&gt;<br />            &lt;/li&gt;<br />        &lt;/ol&gt; <br /> <br />    &lt;/fieldset&gt;<br /><br /><br />&lt;form method=<span style="color: #006080;">"post"</span> action=<span style="color: #006080;">""</span>&gt;<br />    &lt;p&gt;<br />    &lt;input type=<span style="color: #006080;">"submit"</span> <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"Supprimer"</span> title=<span style="color: #006080;">"Supprimer"</span> /&gt;<br /> &lt;a href=<span style="color: #006080;">"Index"</span>&gt;Retour à la liste&lt;/a&gt;<br />    &lt;/p&gt;<br />    &lt;/form&gt;</pre>
<p></div>
<p>Il permet d&rsquo;obtenir le résultat suivant à l&rsquo;exécution :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/deleteaffiliation.png" alt="" title="" /></p>
<p><strong>Conclusion</strong></p>
<p>Entity Framework, la technologie d&rsquo;accès aux données qui est en passe de devenir un standard dans l&rsquo;écosystème .NET peut être assez facilement exploitée avec WebMatrix pour la création d&rsquo;applications Web robustes. Bien que l&rsquo;éditeur WebMatrix manque beaucoup de fonctionnalités et d&rsquo;extensions qui sont disponibles dans Visual Studio, comme l&rsquo;échafaudage pour développer rapidement et facilement des applications utilisant Entity Framework, il permet néanmoins au développeur d&rsquo;exploiter quasiment toutes les fonctionnalités de la librairie et supporte l&rsquo;IntelliSence pour celle-ci.</p>
<p>Ce tutoriel nous a permis de concevoir bout-à-bout une petite solution complète de gestion des affiliations en utilisant Entity Framework, WebMatrix, Razor, NuGet et SQL Server Compact Edition et nous familiariser avec tous ces outils qui sont assez utilisés dans l&rsquo;environnement .NET.</p>
<p>Vous pouvez donc vous baser sur cet exemple ou en modifier le code à votre guise pour développer votre propre application répondant à vos besoins fonctionnels avec WebMatrix.</p>
<p><strong>Sources</strong></p>
<p>Vous pouvez télécharger et modifier les sources ci-dessous à votre convenance.</p>
<p><img src="http://www.developpez.be/images/kitsrc.jpg" alt="" title="" /> <a href="ftp://ftp-developpez.com/rdonfack/WebMatrixCrudApp.rar">Version RAR</a></p>
<p><img src="http://www.developpez.be/images/kitsrc.jpg" alt="" title="" /> <a href="ftp://ftp-developpez.com/rdonfack/WebMatrixCrudApp.zip">Version ZIP</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Création d’une application CRUD avec WebMatrix, Razor et Entity Framework Part 4 : Implémentation des fonctionnalités CRUD</title>
		<link>https://blog.developpez.com/lilroma/p10980/net/creation_d_une_application_crud_avec_web_3</link>
		<comments>https://blog.developpez.com/lilroma/p10980/net/creation_d_une_application_crud_avec_web_3#comments</comments>
		<pubDate>Wed, 25 Apr 2012 10:51:38 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[WebMatrix]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&#8217;une application CRUD avec WebMatrix, Razor et Entity Framework. &#8211; Part 1 : introduction et présentation des outils &#8211; Part 2 : création de l&#8217;application &#8230; <a href="https://blog.developpez.com/lilroma/p10980/net/creation_d_une_application_crud_avec_web_3">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&rsquo;une application CRUD avec WebMatrix, Razor et Entity Framework.</p>
<p>&#8211; Part 1 : <a href="http://blog.developpez.com/lilroma/p10870/">introduction et présentation des outils</a></p>
<p>&#8211; Part 2 : <a href="http://blog.developpez.com/lilroma/p10876/">création de l&rsquo;application et définition du modèle objet</a></p>
<p>&#8211; Part 3 : <a href="http://blog.developpez.com/lilroma/p10896/">création du DBContex et du Repository</a></p>
<p>Dans les parties précédentes, nous nous sommes familiarisés avec outils utilisés, nous avons procédé à la création de l’application, à la définition du modèle objet qui sera utilisé ainsi qu&rsquo;à la création du DBContex et du Repository.</p>
<p>Dans cette partie, nous allons nous plonger dans le vif du sujet en implémentant les interfaces Web pour la lecture, la modification, la suppression et l&rsquo;enregistrement des données dans votre base de données.</p>
<p><span id="more-56"></span></p>
<p>Vous allez dans un premier temps créé un nouveau dossier Personne qui contiendra tous les fichiers pour la gestion des personnes.</p>
<p><strong>1 &#8211; Implémentation de la grille des données</strong></p>
<p>Dans le dossier Personne, ajoutez un nouveau fichier Index.cshtml.</p>
<p>Vous allez ensuite ajouter en début de ce fichier les lignes de code permettant de retourner la liste des personnes qui sont enregistrées dans la base de données. Cette liste sera par la suite affichée grâce au Helper Razor WebGrid, qui va être instancié en passant en paramètre la collection des données qui doivent être affichées et le nombre d&rsquo;éléments sur une page.</p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><br />var pr = <span style="color: #0000ff">new</span> PersonneRepository();<br />var grid = <span style="color: #0000ff">new</span> WebGrid(pr.GetAll(),rowsPerPage : 10);</pre>
<p></div>
<p>Avant d&rsquo;afficher la grille, vous allez procéder au formatage de celle-ci en définissant les colonnes qui seront affichées et en ajoutant notamment de nouvelles colonnes pour l&rsquo;édition, la consultation et la suppression d&rsquo;une ligne de la grille.</p>
<p>Le code pour effectuer cela est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">@grid.GetHtml(tableStyle:<span style="color: #006080">&quot;grid&quot;</span>,<br />  headerStyle:<span style="color: #006080">&quot;head&quot;</span>,<br />    alternatingRowStyle: <span style="color: #006080">&quot;altrow&quot;</span>,<br />         columns: grid.Columns(<br />          grid.Column(<span style="color: #006080">&quot;Nom&quot;</span>,<span style="color: #006080">&quot;Nom&quot;</span>),<br />             grid.Column(<span style="color: #006080">&quot;Prenom&quot;</span>, <span style="color: #006080">&quot;Prénom&quot;</span>),<br />                grid.Column(<span style="color: #006080">&quot;&quot;</span>, <span style="color: #006080">&quot;&quot;</span>, format: @&lt;text&gt;&lt;a href=<span style="color: #006080">&quot;Edit/@item.PersonneId&quot;</span>)&gt;Editer&lt;/a&gt; <br />                       | &lt;a href=<span style="color: #006080">&quot;Details/@item.PersonneId&quot;</span>)&gt;Détails&lt;/a&gt; <br />                         | &lt;a href=<span style="color: #006080">&quot;Delete/@item.PersonneId&quot;</span>)&gt;Supprimer&lt;/a&gt;&lt;/text&gt;)                                                                                     <br />                )<br />        <br />        )</pre>
<p></div>
<p>Le code complet de la page Index.cshtml est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 1200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">@{<br />    <span style="color: #008000">// Set the layout page and page title</span><br />    Layout = <span style="color: #006080">&quot;~/_SiteLayout.cshtml&quot;</span>;<br />    Page.Title = <span style="color: #006080">&quot;Register an Account&quot;</span>;<br /><br />    var pr = <span style="color: #0000ff">new</span> PersonneRepository();<br />    var grid = <span style="color: #0000ff">new</span> WebGrid(pr.GetAll(),rowsPerPage : 10);<br />                  <br />}    <br />&lt;hgroup <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;title&quot;</span>&gt;<br />    &lt;h1&gt;Personnes.&lt;/h1&gt;<br />&lt;/hgroup&gt;  <br /><br />&lt;p&gt;&lt;a href=<span style="color: #006080">&quot;Create&quot;</span>&gt;Ajouter un nouvel enregistrement&lt;/a&gt;&lt;/p&gt;<br />        <br />   @grid.GetHtml(tableStyle:<span style="color: #006080">&quot;grid&quot;</span>,<br />        headerStyle:<span style="color: #006080">&quot;head&quot;</span>,<br />        alternatingRowStyle: <span style="color: #006080">&quot;altrow&quot;</span>,<br />                columns: grid.Columns(<br />                    grid.Column(<span style="color: #006080">&quot;Nom&quot;</span>,<span style="color: #006080">&quot;Nom&quot;</span>),<br />                      grid.Column(<span style="color: #006080">&quot;Prenom&quot;</span>, <span style="color: #006080">&quot;Prénom&quot;</span>),<br />                        grid.Column(<span style="color: #006080">&quot;&quot;</span>, <span style="color: #006080">&quot;&quot;</span>, format: @&lt;text&gt;&lt;a href=<span style="color: #006080">&quot;Edit/@item.PersonneId&quot;</span>)&gt;Editer&lt;/a&gt; <br />                              | &lt;a href=<span style="color: #006080">&quot;Details/@item.PersonneId&quot;</span>)&gt;Détails&lt;/a&gt; <br />                              | &lt;a href=<span style="color: #006080">&quot;Delete/@item.PersonneId&quot;</span>)&gt;Supprimer&lt;/a&gt;&lt;/text&gt;)                                                                                     <br />                )<br />        <br />        )</pre>
<p></div>
<p>La ligne de code :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><br />&lt;p&gt;&lt;a href=<span style="color: #006080;">"Create"</span>&gt;Ajouter un nouvel enregistrement&lt;/a&gt;&lt;/p&gt;</pre>
<p></div>
<p>va permettre d&rsquo;ajouter les nouvelles informations sur une personne dans la BD. À l&rsquo;exécution, vous obtenez le résultat suivant :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/ListePersonnes.PNG" alt="" title="" /></p>
<p>le code CSS que j&rsquo;ai utilisé pour le WebGrid et qui a été défini dans le fichier Site.css pour être appliqué à toutes les grilles de l&rsquo;application est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">.grid { margin: 4px; border-collapse: collapse; width: 600px; }<br /> .head { background-color: #E8E8E8; font-weight: bold; color: #FFF; }<br /> .grid th, .grid td { border: 1px solid #C0C0C0; padding: 5px; }<br /> .altrow { background-color: #E8E8E8; color: #000; }</pre>
<p></div>
<p><strong>2 &#8211; Affichage détaillé </strong></p>
<p>mpte tenu du fait que dans certains cas, il vous sera impossible de présenter toutes les informations sur une entité sur une ligne de la grille, un lien qui pointe sur une page &nbsp;&raquo; Details &nbsp;&raquo; a été introduit donc pour afficher des informations détaillées sur une personne.</p>
<p>Nous verrons ici comment implémenter l&rsquo;interface Web de cette page. Pour cela, vous allez ajouter un nouveau fichier Edit.cshtml dans le dossier Personne.</p>
<p>Au début de ce fichier, vous allez déclarer une variable pour récupérer l&rsquo;id qui est passé comme paramètre HTTP. La méthode Find() sera utilisée pour retourner l&rsquo;élément dans la base de données dont l&rsquo;identifiant est égal à celui qui est passé en paramètre.</p>
<p>Le code pour effectuer cela est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">int</span> id = Request[<span style="color: #006080;">"id"</span>].AsInt();<br />    var pr = <span style="color: #0000ff;">new</span> PersonneRepository();<br />    var personne = <span style="color: #0000ff;">new</span> Personne();<br />    personne = pr.Find(id);</pre>
<p></div>
<p>Il ne vous reste plus qu&rsquo;à afficher les informations contenues dans la variable personne dans votre code html.</p>
<p>Le code complet de la page Details.cshtml est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 800px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><br />@{<br />    <span style="color: #008000">// Set the layout page and page title</span><br />    Layout = <span style="color: #006080">&quot;~/_SiteLayout.cshtml&quot;</span>;<br />    Page.Title = <span style="color: #006080">&quot;Détails&quot;</span>;<br />   <br />    <span style="color: #0000ff">int</span> id = Request[<span style="color: #006080">&quot;id&quot;</span>].AsInt();<br />    var pr = <span style="color: #0000ff">new</span> PersonneRepository();<br />    var personne = <span style="color: #0000ff">new</span> Personne();<br />    personne = pr.Find(id);<br />                  <br />}    <br />&lt;hgroup <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;title&quot;</span>&gt;<br />    &lt;h1&gt;Détails.&lt;/h1&gt;<br />&lt;/hgroup&gt;  <br /> &lt;fieldset&gt;<br />        &lt;legend&gt;&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;nom&quot;</span>&gt;<br />                &lt;label&gt;Nom:&lt;/label&gt;<br />                &lt;label&gt;@personne.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;prenom&quot;</span>&gt;<br />                &lt;label&gt;Prénom:&lt;/label&gt;<br />                &lt;label&gt;@personne.Prenom&lt;/label&gt;<br />            &lt;/li&gt;<br />        &lt;/ol&gt; <br />    &lt;/fieldset&gt;<br /><br />&lt;p&gt;&lt;a href=<span style="color: #006080">&quot;Edit?id=@id&quot;</span>&gt;Editer&lt;/a&gt; |<br /> &lt;a href=<span style="color: #006080">&quot;Index&quot;</span>&gt;Retour à la liste&lt;/a&gt;<br />&lt;/p&gt;</pre>
<p></div>
<p>Ce qui permet d&rsquo;obtenir le résultat suivant à l&rsquo;exécution, après un clic sur le lien Détails d&rsquo;une ligne de la grille contenant la liste des personnes :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/detailspersonne.PNG" alt="" title="" /></p>
<p><strong>3 &#8211; Enregistrement des données</strong></p>
<p>Dans la page affichant la liste des personnes, vous avez ajouté un lien permettant d&rsquo;accéder à la page d&rsquo;ajout d&rsquo;un nouvel enregistrement. Penchons-nous maintenant sur l&rsquo;implémentation de cette page. Vous allez ajouter une nouvelle page dans le dossier Personne. Il suffit pour cela de faire un clic droit sur le dossier Personne, sélectionner &nbsp;&raquo; New Files &nbsp;&raquo; et créer un nouveau fichier &nbsp;&raquo; create.cshtml &nbsp;&raquo; dans la fenêtre qui va s&rsquo;afficher.</p>
<p>Le code source du formulaire d&rsquo;enregistrement d&rsquo;une personne est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 800px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">&lt;form method=<span style="color: #006080">&quot;post&quot;</span> action=<span style="color: #006080">&quot;&quot;</span>&gt;<br />    @* Notification en cas d'erreur de validation *@<br />    @Html.ValidationSummary(<span style="color: #006080">&quot;Veuillez corriger les erreurs suivantes:&quot;</span>)<br /><br />    &lt;fieldset&gt;<br />        &lt;legend&gt;Registration Form&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;nom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;nom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;nom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Nom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;nom&quot;</span> name=<span style="color: #006080">&quot;nom&quot;</span> title=<span style="color: #006080">&quot;Nom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@nom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;nom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;nom&quot;</span>)<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;prenom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;prenom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;prenom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Prénom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;prenom&quot;</span> name=<span style="color: #006080">&quot;prenom&quot;</span> title=<span style="color: #006080">&quot;Prénom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@prenom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;prenom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;prenom&quot;</span>)<br />            &lt;/li&gt;<br />        &lt;/ol&gt;<br />        &lt;input type=<span style="color: #006080">&quot;submit&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;Enregistrer&quot;</span> title=<span style="color: #006080">&quot;Enregistrer&quot;</span> /&gt;<br />        <br />    &lt;/fieldset&gt;<br />&lt;/form&gt;</pre>
<p></div>
<p>Afin d&rsquo;envoyer des données correctes vers votre classe entité pour laquelle vous avez défini certains champs comme obligatoires, vous devez procéder à la validation des données utilisateur.</p>
<p>Les méthodes <strong>@Html.ValidationSummary()</strong> et <strong>@Html.ValidationMessage()</strong> sont utilisées pour afficher les messages d&rsquo;erreurs de validation à l&rsquo;utilisateur.</p>
<p>Vous allez utiliser JQuery et les nouvelles classes de validation System.Web.WebPages.ValidationHelper et System.Web.WebPages.Validator qui ont été introduites par WebPages 2 pour effectuer en seulement quelques lignes de code, des tâches de validation de données puissantes.</p>
<p>Le code pour effectuer cela est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #008000">// Ajout des scripts de validation</span><br />   Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery-1.6.2.min.js&quot;</span>);<br />   Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.min.js&quot;</span>);<br />   Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.unobtrusive.min.js&quot;</span>);<br /><br />   <span style="color: #008000">// Validation du nom</span><br />   Validation.RequireField(<span style="color: #006080">&quot;nom&quot;</span>, <span style="color: #006080">&quot;Le nom est obligatoire.&quot;</span>);<br />   <span style="color: #008000">// Validation du prénom</span><br />   Validation.RequireField(<span style="color: #006080">&quot;prenom&quot;</span>, <span style="color: #006080">&quot;Le prénom est obligatoire.&quot;</span>);</pre>
<p></div>
<p>Il ne vous reste plus qu&rsquo;à écrire le code permettant d&rsquo;ajouter les données postées par un utilisateur dans la base de données :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><br />var pr = <span style="color: #0000ff;">new</span> PersonneRepository();<br />                 var personne = <span style="color: #0000ff;">new</span> Personne{<br />                 Nom = nom, Prenom = prenom};<br />                 <span style="color: #008000;">//Ajout des données sur la personne</span><br />                 pr.Add(personne);</pre>
<p></div>
<p>Le code complet de la page Create.cshtml est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 1200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><br />@{<br />    <span style="color: #008000">// Définition du layout et du titre de la page</span><br />    Layout = <span style="color: #006080">&quot;~/_SiteLayout.cshtml&quot;</span>;<br />    Page.Title = <span style="color: #006080">&quot;Register an Account&quot;</span>;<br /><br />    <span style="color: #008000">// initialisation des varaiables</span><br />    var nom = <span style="color: #006080">&quot;&quot;</span>;<br />    var prenom = <span style="color: #006080">&quot;&quot;</span>;<br />   <br />     <span style="color: #008000">// Ajout des scripts de validation</span><br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery-1.6.2.min.js&quot;</span>);<br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.min.js&quot;</span>);<br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.unobtrusive.min.js&quot;</span>);<br /><br />    <span style="color: #008000">// Validation du nom</span><br />    Validation.RequireField(<span style="color: #006080">&quot;nom&quot;</span>, <span style="color: #006080">&quot;Le nom est obligatoire.&quot;</span>);<br />    <span style="color: #008000">// Validation du prénom</span><br />    Validation.RequireField(<span style="color: #006080">&quot;prenom&quot;</span>, <span style="color: #006080">&quot;Le prénom est obligatoire.&quot;</span>);<br />    <span style="color: #008000">//Triatement des données si s'est une requête POST</span><br />    <span style="color: #0000ff">if</span> (IsPost) {<br />        nom = Request.Form[<span style="color: #006080">&quot;nom&quot;</span>];<br />        prenom= Request.Form[<span style="color: #006080">&quot;prenom&quot;</span>];<br />        <br />          <span style="color: #0000ff">if</span> (Validation.IsValid()) { <br />                var pr = <span style="color: #0000ff">new</span> PersonneRepository();<br />                 var personne = <span style="color: #0000ff">new</span> Personne{<br />                 Nom = nom, Prenom = prenom};<br />                 <span style="color: #008000">//Ajout des données sur la personne</span><br />                 pr.Add(personne);<br />                 Response.Redirect(<span style="color: #006080">&quot;Index&quot;</span>);<br />             }<br />    };<br />   <br />                  <br />        }    <br />   <br /><br />&lt;hgroup <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;title&quot;</span>&gt;<br />    &lt;h1&gt;Ajout d<span style="color: #006080">'un nouvel enregistrement.&lt;/h1&gt;<br />   &gt;<br />&lt;/hgroup&gt;<br /><br />&lt;form method=&quot;post&quot; action=&quot;&quot;&gt;<br />    @* Notification en cas d'</span>erreur de validation *@<br />    @Html.ValidationSummary(<span style="color: #006080">&quot;Veuillez corriger les erreurs suivantes:&quot;</span>)<br /><br />    &lt;fieldset&gt;<br />        &lt;legend&gt;Registration Form&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;nom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;nom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;nom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Nom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;nom&quot;</span> name=<span style="color: #006080">&quot;nom&quot;</span> title=<span style="color: #006080">&quot;Nom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@nom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;nom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;nom&quot;</span>)<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;prenom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;prenom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;prenom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Prénom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;prenom&quot;</span> name=<span style="color: #006080">&quot;prenom&quot;</span> title=<span style="color: #006080">&quot;Prénom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@prenom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;prenom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;prenom&quot;</span>)<br />            &lt;/li&gt;<br />        &lt;/ol&gt;<br />        &lt;input type=<span style="color: #006080">&quot;submit&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;Enregistrer&quot;</span> title=<span style="color: #006080">&quot;Enregistrer&quot;</span> /&gt;<br />        <br />    &lt;/fieldset&gt;<br />&lt;/form&gt;<br />&lt;a href=<span style="color: #006080">&quot;Index&quot;</span>&gt;Retour à la liste&lt;/a&gt;</pre>
<p></div>
<p>À l&rsquo;exécution de cette page, vous obtenez le résultat suivant :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/enregpersonne.png" alt="" title="" /></p>
<p>En cas d&rsquo;erreur de validation, vous aurez le résultat suivant :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/enregpersonneerreurvalidation.png" alt="" title="" /></p>
<p><strong>4 &#8211;  Modification</strong></p>
<p>Après l&rsquo;enregistrement des données sur une personne, voyons maintenant comment nous allons implémenter une nouvelle page permettant de procéder à la mise à jour des informations sur une personne.</p>
<p>Comme vous avez ajouté un lien &nbsp;&raquo; Editer &nbsp;&raquo; dans le tableau des personnes qui pointe sur la page &nbsp;&raquo; Edit &laquo;&nbsp;, vous allez créer un nouveau fichier cshtml ayant ce nom.</p>
<p>La page doit afficher par défaut les informations qui doivent être modifiées dans des zones éditables. Vous allez donc dans un premier temps récupérer ces informations. Le code pour effectuer cela est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">int</span> id = Request[<span style="color: #006080;">"id"</span>].AsInt();<br /><br />    var db = <span style="color: #0000ff;">new</span> WebMatrixCrudAppContext();<br />    var personne = <span style="color: #0000ff;">new</span> Personne();<br />    personne = db.Personnes.Find(id);<br />    <span style="color: #008000;">// initialisation des variables</span><br />    var nom = personne.Nom;<br />    var prenom = personne.Prenom;</pre>
<p></div>
<p>Le code du formulaire de modification est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 800px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">&lt;form method=<span style="color: #006080">&quot;post&quot;</span> action=<span style="color: #006080">&quot;&quot;</span>&gt;<br />    @* If at least one validation error exists, notify the user *@<br />    @Html.ValidationSummary(<span style="color: #006080">&quot;Veuillez corriger les erreurs suivantes:&quot;</span>)<br /><br />    &lt;fieldset&gt;<br />        &lt;legend&gt;Formulaire de modification&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;nom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;nom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;nom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Nom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;nom&quot;</span> name=<span style="color: #006080">&quot;nom&quot;</span> title=<span style="color: #006080">&quot;Nom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@nom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;nom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;nom&quot;</span>)<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;prenom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;prenom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;prenom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Prénom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;prenom&quot;</span> name=<span style="color: #006080">&quot;prenom&quot;</span> title=<span style="color: #006080">&quot;Prénom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@prenom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;prenom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;prenom&quot;</span>)<br />            &lt;/li&gt;<br />        &lt;/ol&gt;<br />        &lt;input type=<span style="color: #006080">&quot;submit&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;Modifier&quot;</span> title=<span style="color: #006080">&quot;Modifier&quot;</span> /&gt;<br />        <br />    &lt;/fieldset&gt;<br />&lt;/form&gt;</pre>
<p></div>
<p>Le code permettant de prendre en compte les modifications dans la base de données est le suivant</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">personne.Nom = nom;<br />personne.Prenom = prenom;<br /><span style="color: #008000;">//Modification des données sur la personne</span><br />pr.Update(personne);</pre>
<p></div>
<p>Le code complet de la page Edit.cshtml est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 1200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">@<span style="color: #0000ff">using</span> System.Data<br />@{<br />    <span style="color: #008000">// Définition du layout et du titre de la page</span><br />    Layout = <span style="color: #006080">&quot;~/_SiteLayout.cshtml&quot;</span>;<br />    Page.Title = <span style="color: #006080">&quot;Modification d'une personne&quot;</span>;<br /><br />    <br />    <span style="color: #0000ff">int</span> id = Request[<span style="color: #006080">&quot;id&quot;</span>].AsInt();<br /><br />    var pr = <span style="color: #0000ff">new</span> PersonneRepository();<br />    var personne = <span style="color: #0000ff">new</span> Personne();<br />    personne = pr.Find(id);<br />    <span style="color: #008000">// initialisation des variables</span><br />    var nom = personne.Nom;<br />    var prenom = personne.Prenom;<br />   <br />    <span style="color: #008000">// Ajout des scripts de validation</span><br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery-1.6.2.min.js&quot;</span>);<br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.min.js&quot;</span>);<br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.unobtrusive.min.js&quot;</span>);<br /><br />   <span style="color: #008000">// Validation du nom</span><br />    Validation.RequireField(<span style="color: #006080">&quot;nom&quot;</span>, <span style="color: #006080">&quot;Le nom est obligatoire.&quot;</span>);<br />   <span style="color: #008000">// Validation du prénom</span><br />    Validation.RequireField(<span style="color: #006080">&quot;prenom&quot;</span>, <span style="color: #006080">&quot;Le prénom est obligatoire.&quot;</span>);<br />    <span style="color: #008000">//Traitement des données si s'est une requête POST</span><br />    <span style="color: #0000ff">if</span> (IsPost) {<br />        nom = Request.Form[<span style="color: #006080">&quot;nom&quot;</span>];<br />        prenom= Request.Form[<span style="color: #006080">&quot;prenom&quot;</span>];<br />        <br />          <span style="color: #0000ff">if</span> (Validation.IsValid()) { <br />                <br />                 personne.Nom = nom;<br />                 personne.Prenom = prenom;<br />                 <span style="color: #008000">//Modification des données sur la personne</span><br />                 pr.Update(personne);<br />            <br />                 Response.Redirect(<span style="color: #006080">&quot;Index&quot;</span>);<br />                <br />             }<br />    };<br />   <br />                  <br />        }    <br />   <br /><br />&lt;hgroup <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;title&quot;</span>&gt;<br />    &lt;h1&gt;Mise à jour des données.&lt;/h1&gt;<br />&lt;/hgroup&gt;<br /><br />&lt;form method=<span style="color: #006080">&quot;post&quot;</span> action=<span style="color: #006080">&quot;&quot;</span>&gt;<br />    @* If at least one validation error exists, notify the user *@<br />    @Html.ValidationSummary(<span style="color: #006080">&quot;Veuillez corriger les erreurs suivantes:&quot;</span>)<br /><br />    &lt;fieldset&gt;<br />        &lt;legend&gt;Formulaire de modification&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;nom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;nom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;nom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Nom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;nom&quot;</span> name=<span style="color: #006080">&quot;nom&quot;</span> title=<span style="color: #006080">&quot;Nom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@nom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;nom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;nom&quot;</span>)<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;prenom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;prenom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;prenom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Prénom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;prenom&quot;</span> name=<span style="color: #006080">&quot;prenom&quot;</span> title=<span style="color: #006080">&quot;Prénom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@prenom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;prenom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;prenom&quot;</span>)<br />            &lt;/li&gt;<br />        &lt;/ol&gt;<br />        &lt;input type=<span style="color: #006080">&quot;submit&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;Modifier&quot;</span> title=<span style="color: #006080">&quot;Modifier&quot;</span> /&gt;<br />        <br />    &lt;/fieldset&gt;<br />&lt;/form&gt;<br /><br />&lt;p&gt;<br /> &lt;a href=<span style="color: #006080">&quot;Index&quot;</span>&gt;Retour à la liste&lt;/a&gt;<br />&lt;/p&gt;</pre>
<p></div>
<p>À l&rsquo;exécution de la page, vous obtenez le résultat suivant :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/modifpersonne.png" alt="" title="" /></p>
<p><strong>5 &#8211; Suppression</strong></p>
<p>Pour finir avec la table Personnes, vous allez maintenant écrire le code permettant de supprimer un enregistrement dans la base de données. Créez pour cela une nouvelle page Delete.cshtml.</p>
<p>Afin d&rsquo;éviter les suppressions accidentelles, vous allez dans un premier temps afficher dans cette page le récapitulatif des informations sur une personne avec un message de confirmation de suppression.</p>
<p>Le code pour la page Delete reprend celui de la page Edit, à la différence que vous allez ajouter dans un formulaire un bouton permettant de procéder à la suppression d&rsquo;un enregistrement :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">&lt;form method=<span style="color: #006080;">"post"</span> action=<span style="color: #006080;">""</span>&gt;<br />    &lt;p&gt;<br />    &lt;input type=<span style="color: #006080;">"submit"</span> <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"Supprimer"</span> title=<span style="color: #006080;">"Supprimer"</span> /&gt;<br /> &lt;a href=<span style="color: #006080;">"Index"</span>&gt;Retour à la liste&lt;/a&gt;<br />    &lt;/p&gt;<br />    &lt;/form&gt;</pre>
<p></div>
<p>Vous allez également ajouter dans ce fichier le code permettant de supprimer les données dans la base de données en cas de clic sur le bouton supprimer :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><br /><span style="color: #0000ff;">if</span>(IsPost)<br />    {<br />            pr.Remove(personne);<br />            Response.Redirect(<span style="color: #006080;">"Index"</span>);<br />    }<br />            </pre>
<p></div>
<p>Le code complet de la page Delete.cshtml est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 1200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">@{<br />   <span style="color: #008000;">// Définition du layout et du titre de la page</span><br />    Layout = <span style="color: #006080;">"~/_SiteLayout.cshtml"</span>;<br />    Page.Title = <span style="color: #006080;">"Détails"</span>;<br /><br />    <span style="color: #008000;">//Lecture des données sur une personne</span><br />    <span style="color: #0000ff;">int</span> id = Request[<span style="color: #006080;">"id"</span>].AsInt();<br />    var pr = <span style="color: #0000ff;">new</span> PersonneRepository();<br />    var personne = <span style="color: #0000ff;">new</span> Personne();<br />    personne = pr.Find(id);<br />    <span style="color: #008000;">//Traitement des données si s'est une requête POST</span><br />    <span style="color: #0000ff;">if</span>(IsPost)<br />    {<br />            <span style="color: #008000;">//Supression de l'enregistrement</span><br />            pr.Remove(personne);<br />            Response.Redirect(<span style="color: #006080;">"Index"</span>);<br />    }<br />                  <br />}    <br />&lt;hgroup <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"title"</span>&gt;<br />    &lt;h1&gt;Suppression.&lt;/h1&gt;<br />   &lt;h3&gt;Êtes-vous sur de vouloir supprimer cet enregistrement ?&lt;/h3&gt;<br />&lt;/hgroup&gt;  <br /> &lt;fieldset&gt;<br />        &lt;legend&gt;&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"nom"</span>&gt;<br />                &lt;label&gt;Nom:&lt;/label&gt;<br />                &lt;label&gt;@personne.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"prenom"</span>&gt;<br />                &lt;label&gt;Prénom:&lt;/label&gt;<br />                &lt;label&gt;@personne.Prenom&lt;/label&gt;<br />            &lt;/li&gt;<br />        &lt;/ol&gt; <br /> <br />    &lt;/fieldset&gt;<br /><br /><br />&lt;form method=<span style="color: #006080;">"post"</span> action=<span style="color: #006080;">""</span>&gt;<br />    &lt;p&gt;<br />    &lt;input type=<span style="color: #006080;">"submit"</span> <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"Supprimer"</span> title=<span style="color: #006080;">"Supprimer"</span> /&gt;<br /> &lt;a href=<span style="color: #006080;">"Index"</span>&gt;Retour à la liste&lt;/a&gt;<br />    &lt;/p&gt;<br />    &lt;/form&gt;</pre>
<p></div>
<p>Ce qui donne le résultat suivant à l&rsquo;exécution :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/deletepersonne.png" alt="" title="" /></p>
<p>Compte tenu du fait que l&rsquo;implémentation des fonctionnalités pour la table Organismes reprend plusieurs des principes et méthodes qui ont été utilisés pour la table Personnes, nous n&rsquo;allons plus revenir sur la création des pages d&rsquo;affichage, d&rsquo;enregistrement, de mise à jour ou de suppression d&rsquo;un organisme.</p>
<p>Pour écrire le code de ces pages, veuillez vous référer à celui pour la table Personnes ou à défaut, regarder le code source pour ces pages dans les fichiers du projet qui sont disponibles en téléchargement à la fin de l&rsquo;article.</p>
<p>La prochaine et dernière partie portera donc sur l’implémentation des fonctionnalités CRUD pour la table Affiliations, qui sera un peu différente puisque c&rsquo;est table association.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Création d’une application CRUD avec WebMatrix, Razor et Entity Framework Part 2 : création de l&#8217;application et définition du modèle objet</title>
		<link>https://blog.developpez.com/lilroma/p10876/net/creation_d_une_application_crud_avec_web_1</link>
		<comments>https://blog.developpez.com/lilroma/p10876/net/creation_d_une_application_crud_avec_web_1#comments</comments>
		<pubDate>Sun, 25 Mar 2012 14:07:24 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&#8217;une application CRUD avec WebMatrix, Razor et Entity Framework. Dans la première partie introductive, nous avons présenté le but de cet article et les différents &#8230; <a href="https://blog.developpez.com/lilroma/p10876/net/creation_d_une_application_crud_avec_web_1">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&rsquo;une application CRUD avec WebMatrix, Razor et Entity Framework.</p>
<p>Dans <a href="http://blog.developpez.com/lilroma/p10870/">la première partie introductive</a>, nous avons présenté le but de cet article et les différents outils qui seront utilisés pour l’implémentation de notre application CRUD.</p>
<p>Cette seconde partie portera essentiellement sur la création de l&rsquo;application avec WebMatrix, l’installation d&rsquo;Entity Framework à partir de NuGet et la définition du modèle objet.</p>
<p><span id="more-53"></span></p>
<p><strong>Création de l’application</strong></p>
<p>Maintenant que nous nous sommes familiarisés avec les différents outils que nous allons utiliser, nous pouvons maintenant procéder à la création de notre application.<br />
Pour cela, vous allez lancer WebMatrix. Dans la fenêtre de démariage rapide, vous allez sélectionner Modèles (Templates) parmi les différentes options qui sont proposées.</p>
<p><img src="http://blog.developpez.com/media/quickstart.PNG" width="821" height="546" alt="" /> </p>
<p>Dans la fenêtre qui va s’afficher, sélectionnez le modèle de projet Site de démarrage (Starter Site), renseignez le nom du site (<strong>WebMatrixCRUDApp</strong>) et cliquez enfin pour le bouton OK.</p>
<p><img src="http://blog.developpez.com/media/Templates_01.PNG" width="824" height="547" alt="" /> </p>
<p>Le modèle Site de démarrage contient par défaut une interface à onglet et des fonctionnalités d’authentification.</p>
<p>Une fois le projet créé, vous pouvez voir les éléments suivants dans la fenêtre d’exploration, en sélectionnant l’espace de travail Files dans la zone de sélection d’espace de travail.</p>
<p><img src="http://blog.developpez.com/media/solutionexplorer_01.PNG" width="192" height="315" alt="" /></p>
<p><strong>Installation d’Entity Framework</strong></p>
<p>Dans la boite d’outils, vous allez cliquer sur le bouton « Gallery » ayant le logo de NuGet. Dans la fenêtre des packages qui s’affichent par défaut, sélectionnez le package Entity Framework comme l’illustre l’image ci-dessous :</p>
<p><img src="http://blog.developpez.com/media/DownloadEntity.PNG" width="409" height="285" alt="" /></p>
<p>La fenêtre du gestionnaire de packages NuGet s’affiche avec les détails sur le package que vous souhaitez installer.<br />
Cliquez sur le bouton « Install » et acceptez les termes d’utilisation pour que NuGet procède au téléchargement et à l’installation d’Entity Framework dans votre application :</p>
<p><img src="http://blog.developpez.com/media/InstallEntityF.PNG" width="714" height="483" alt="" /> </p>
<p>Le fichier EntityFramework.dll sera alors ajouté dans le dossier bin de votre application et une référence à l’espace de nom System.Data.Entity sera automatiquement ajoutée au fichier Web.config.</p>
<p><strong>Définition du modèle objet</strong></p>
<p>Notre exemple simple portera sur une petite application pour la gestion du carnet d’adresses d’une entreprise. L’entreprise contient plusieurs organismes  et un employé peut travailler dans un ou plusieurs organismes.</p>
<p>Le schéma de la base de données que nous allons utiliser est donc le suivant :</p>
<p><img src="http://blog.developpez.com/media/DatabaseSchema.PNG" width="594" height="316" alt="" /> </p>
<p>De ce schéma, nous allons créer les différentes entités correspondantes. Chaque entité doit être définie comme une classe C# afin d’être compréhensible par Entity Framework.</p>
<p>Vous allez créer un nouveau dossier « App_code » en faisant un clic droit sur votre projet dans l’explorateur de solution et en cliquant sur « New Folder ».</p>
<p>Sélectionnez ce dossier et ajoutez-y un nouveau fichier C# en cliquant sur le bouton « New » de la boite d’outils et ensuite sur la commande « New File ». </p>
<p>Dans la fenêtre qui va s’afficher, sélectionnez le type de fichier Class(C#), renseignez le nom du fichier (Personne.cs)  et validez sur OK.</p>
<p>Ajoutez par la suite les lignes de code suivantes dans ce fichier pour définir  la classe Personne.</p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">partial</span> <span style="color: #0000ff">class</span> Personne<br />{<br />    <br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> PersonneId { get; set;}<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Nom {get; set;}<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Prenom {get; set;}<br /><br />}<br /></pre>
<p></div>
<p>Procédez de même pour le fichier Organisme.cs, dont la classe aura la définition suivante :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> Organisme<br />{<br />   <br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> OrganismeId { get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Nom {get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Adresse {get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Telephone {get; set;}<br />}<br /></pre>
<p></div>
<p>Créez également la classe Affiliation qui aura la définition suivante :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> Affiliation<br />{   <br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> PersonneId { get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> OrganismeId { get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Fonction {get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Email {get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Telephone {get; set;}<br />}<br /></pre>
<p></div>
<p>À ce stade, vous avez simplement défini des entités correspondantes au schéma de votre base de données. Cependant,  Entity Framework est incapable de définir les relations entre les tables Presonne et Affilialtion, ainsi qu’entre les tables Organisme et Affiliation.</p>
<p>Pour matérialiser cela, vous allez donc ajouter une propriété Personne et une propriété Organisme dans la classe Affiliation. La nouvelle définition de cette classe est la suivante :</p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">partial</span> <span style="color: #0000ff">class</span> Affiliation<br />{<br />   <br />   <span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> PersonneId { get; set;}<br />   <span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> OrganismeId { get; set;}<br />   <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Fonction {get; set;}<br />   <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Email {get; set;}<br />   <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Telephone {get; set;}<br /><br />   <span style="color: #0000ff">public</span> <span style="color: #0000ff">virtual</span> Personne Personne {get; set;}<br />   <span style="color: #0000ff">public</span> <span style="color: #0000ff">virtual</span> Organisme Organisme {get; set;}<br />}<br /></pre>
<p></div>
<p>De même, pour matérialiser le fait qu’une Personne peut avoir plusieurs affiliations dans divers organismes et le fait qu’un organisme dispose de plusieurs personnes affiliées, vous allez ajouter également une propriété supplémentaire dans chacune de ces deux tables. </p>
<p>La nouvelle définition de la classe Personne sera donc la suivante :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> Personne<br />{<br />    <br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> PersonneId { get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Nom {get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Prenom {get; set;}<br /><br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">virtual</span> ICollection&lt;Affiliation&gt; Affiliation {get; set;}<br />}<br /></pre>
<p></div>
<p>Et celle de la classe Organisme sera la suivante : </p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">partial</span> <span style="color: #0000ff">class</span> Organisme<br />{<br />   <br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> OrganismeId { get; set;}<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Nom {get; set;}<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Adresse {get; set;}<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Telephone {get; set;}<br /><br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">virtual</span> ICollection&lt;Affiliation&gt; Affiliation {get; set;}<br /><br />}<br /></pre>
<p></div>
<p>Par défaut, lors de la génération de la base de données correspondante à votre modèle objet,  les champs string seront définis par Entity Framework Code First comme des colonnes nvarchar(4000). Pour limiter cette taille, vous allez utiliser l’attribut <strong>[MaxLengthAttribute()]</strong> de la classe DataAnnotation.</p>
<p>L’attribut <strong>[RequiredAttribute]</strong> de cette classe sera également utilisé pour définir les propriétés dont les valeurs sont obligatoires. [ScaffoldColumnAttribute] sera utilisé pour spécifier que la clé primaire doit être autoincrément. Enfin, vous allez définir l’attribut <strong>[KeyAttribute</strong>] pour spécifier les clés étrangères et les tables auxquelles ces clés sont liées.</p>
<p>Le code complet du fichier Personne.cs sera donc le suivant :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">using</span> System;<br /><span style="color: #0000ff;">using</span> System.Collections.Generic;<br /><span style="color: #0000ff;">using</span> System.ComponentModel.DataAnnotations;<br /><span style="color: #0000ff;">using</span> System.Web;<br /><br /><span style="color: #008000;">/// &lt;summary&gt;</span><br /><span style="color: #008000;">/// Summary description for ClassName</span><br /><span style="color: #008000;">/// &lt;/summary&gt;</span><br /><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> Personne<br />{<br />    [ScaffoldColumnAttribute(<span style="color: #0000ff;">false</span>)]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> PersonneId { get; set;}<br />    [MaxLengthAttribute(50)]<br />    [RequiredAttribute]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Nom {get; set;}<br />    [MaxLengthAttribute(50)]<br />    [RequiredAttribute]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Prenom {get; set;}<br /><br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">virtual</span> ICollection&lt;Affiliation&gt; Affiliation {get; set;}<br /><br />}<br /></pre>
<p></div>
<p>Celui du fichier Organisme.cs est le suivant :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">using</span> System;<br /><span style="color: #0000ff;">using</span> System.Collections.Generic;<br /><span style="color: #0000ff;">using</span> System.ComponentModel.DataAnnotations;<br /><span style="color: #0000ff;">using</span> System.Web;<br /><br /><span style="color: #008000;">/// &lt;summary&gt;</span><br /><span style="color: #008000;">/// Summary description for ClassName</span><br /><span style="color: #008000;">/// &lt;/summary&gt;</span><br /><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> Organisme<br />{<br />   [ScaffoldColumnAttribute(<span style="color: #0000ff;">false</span>)]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> OrganismeId { get; set;}<br />    [MaxLengthAttribute(50)]<br />    [RequiredAttribute]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Nom {get; set;}<br />    [MaxLengthAttribute(50)]<br />    [RequiredAttribute]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Adresse {get; set;}<br />    [MaxLengthAttribute(50)]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Telephone {get; set;}<br /><br />     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">virtual</span> ICollection&lt;Affiliation&gt; Affiliation {get; set;}<br />}<br /></pre>
<p></div>
<p>Et enfin, la nouvelle définition du fichier Affiliation.cs est la suivante :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">using</span> System;<br /><span style="color: #0000ff;">using</span> System.Collections.Generic;<br /><span style="color: #0000ff;">using</span> System.ComponentModel.DataAnnotations;<br /><span style="color: #0000ff;">using</span> System.Web;<br /><br /><span style="color: #008000;">/// &lt;summary&gt;</span><br /><span style="color: #008000;">/// Summary description for ClassName</span><br /><span style="color: #008000;">/// &lt;/summary&gt;</span><br /><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> Affiliation<br />{   <br />    [KeyAttribute, ForeignKey(<span style="color: #006080;">"Personne"</span>), Column(Order = 0)]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> PersonneId { get; set;}<br />    [KeyAttribute, ForeignKey(<span style="color: #006080;">"Organisme"</span>), Column(Order = 1)]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> OrganismeId { get; set;}<br />    [MaxLengthAttribute(50)]<br />    [RequiredAttribute]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Fonction {get; set;}<br />    [MaxLengthAttribute(50)]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Email {get; set;}<br />    [MaxLengthAttribute(50)]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Telephone {get; set;}<br /><br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">virtual</span> Personne Personne {get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">virtual</span> Organisme Organisme {get; set;}<br />}</pre>
<p></div>
<p>La troisième partie portera sur la création du DbContext, de la base de données à partir du modèle objet avec EF Code First et enfin la définition des différentes classes Repository qui seront utilisées.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Création d’une application CRUD avec WebMatrix, Razor et Entity Framework Part 1 : Introduction et présentation des outils</title>
		<link>https://blog.developpez.com/lilroma/p10870/net/creation_d_une_application_crud_avec_web</link>
		<comments>https://blog.developpez.com/lilroma/p10870/net/creation_d_une_application_crud_avec_web#comments</comments>
		<pubDate>Fri, 23 Mar 2012 15:40:55 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[WebMatrix]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[J’ai eu à développer récemment une application CRUD avec WebMatrix. Utilisant principalement la classe DataBase de l’espace de nom Microsoft.Data pour la manipulation des données, lorsque j’ai aperçu Entity Framework dans les packages NuGet avec WebMatrix 2 bêta, je me &#8230; <a href="https://blog.developpez.com/lilroma/p10870/net/creation_d_une_application_crud_avec_web">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>J’ai eu à développer récemment une application CRUD avec WebMatrix. Utilisant principalement la classe DataBase de l’espace de nom Microsoft.Data pour la manipulation des données, lorsque j’ai aperçu Entity Framework dans les packages NuGet avec WebMatrix 2 bêta, je me suis dit génial ! Ça veut dire que je peux l’utiliser dans ma solution.</p>
<p>J’ai donc opté pour l’utilisation de la bibliothèque au sein de mon application WebMatrix. Entity Framework est en passe de devenir un standard pour la manipulation des données et est recommandé par Microsoft.  </p>
<p>Contrairement avec Visual Studio et ASP.NET ou l’on dispose de plusieurs outils rendant facile la conception d’une application CRUD avec Entity Framework, sur WebMatrix, c’est un peu compliqué et l’on ne dispose pas des fonctionnalités comme l’échafaudage, et encore moins des ressources sur Internet.</p>
<p>C’est pourquoi, j’ai donc décidé de fournir au travers de cet article une démarche pas à pas avec autant que possible des détails pour la conception d’une application CRUD avec WebMatrix, Razor et Entity Framework.</p>
<p><span id="more-54"></span></p>
<p>Le lecteur tout au long de ce tutoriel, pourra se familiariser avec WebMatrix, Razor, Entity Framework, le gestionnaire de packages open source .NET NuGet pour WebMatrix et le gestionnaire de base de données SQL Server Compact Edition.</p>
<p>Cet article est essentiellement destiné aux débutants. Aucun prérequis n’est donc nécessaire pour sa bonne compréhension. Mais, il est néanmoins conseillé que vous vous soyez familiarisé avec WebMatrix et Razor.</p>
<p>Si ce n’est pas le cas,  je vous conseille de lire dans un premier temps mon tutoriel de présentation de WebMatrix ainsi que  mon tutoriel sur Razor.</p>
<p><strong>Description des outils de travail</strong></p>
<p><strong>WebMatrix </strong></p>
<p>Pour rappel, WebMatrix est un environnement de développement Web léger (15 Mo), efficace et surtout gratuit, développé par Microsoft. Il permet aux développeurs Web de créer et gérer des applications Web sur la plate-forme Windows, tout en restant compatibles avec les produits Microsoft Visual Studio, SQL Server ou encore PHP sur Windows.</p>
<p>Lire le tutoriel sur la <a href="http://rdonfack.developpez.com/tutoriels/web/webmatrix-decouverte-et-prise-main-outil-developpement-web-gratuit-tout/">présentation de WebMatrix</a>.</p>
<p> Pour cet article, nous utiliserons la bêta de WebMatrix 2, qui est la version la plus récente de l’environnement de développement Web. L&rsquo;EDI est téléchargeable <a href="http://aka.ms/webmatrix2blog">sur cette page</a>.</p>
<p>Son installation est assez simple et se fait via Windows Installer. L’outil installe automatiquement SQL Server Compact Edition et WebPages 2 Developer Preview, sur lequel repose les pages Web ASP.NET écrites avec WebMatrix.</p>
<p><strong>Razor</strong></p>
<p>Razor a été conçu pour faciliter la conception des pages ASP.NET. Il introduit une syntaxe de programmation assez facilement compréhensible, qui vous permet d&rsquo;insérer du code serveur dans une page Web qui peut également contenir du HTML, du CSS et des scripts JavaScript.</p>
<p>Le moteur Razor est fluide, compact, expressif et s&rsquo;appuie sur la syntaxe des langages .NET C# et Visual Basic .NET. Il offre la puissance d&rsquo;ASP.NET pour la création rapide des applications Web fonctionnelles et sophistiquées.</p>
<p>Lire mon tutoriel sur <a href="http://rdonfack.developpez.com/tutoriels/dotnet/creation-pages-web-asp-net-utilisant-moteur-vue-razor/">la présentation de Razor</a>.</p>
<p><strong>SQL Server Compact Edition</strong></p>
<p>SQL Server Compact Edition. Est un gestionnaire de base de données relationnelle compact, gratuit, mis au point par Microsoft pour le développement des applications pouvant s’exécuter sur des ordinateurs de bureau et les dispositifs mobiles.</p>
<p>SQL Server Compact partage un modèle de programmation commun avec différentes éditions de SQL Server qui permet aux développeurs de créer des applications natives et managées. SQL Server Compact fournit des fonctionnalités de base de données relationnelle : une source de données fiable, un processeur d’optimisation des requêtes et des possibilités de connectivité fiables et évolutives.<br />
La prise en charge du développement pour SQL Server Compact est fournie par Visual Studio et également WebMatrix. L’environnement intègre un éditeur graphique permettant de créer, modifier, exécuter des requêtes et administrer une base de données SQL Server Compact.</p>
<p><strong>Entity Framework</strong></p>
<p>De plus en plus, les développeurs préfèrent utiliser des données comme des objets, au lieu d’utiliser les requêtes SQL pour interroger directement la base de données.  Entity Framework est un ORM permettant aux développeurs de créer des applications d&rsquo;accès aux données en programmant par rapport à un modèle d&rsquo;application conceptuel au lieu de programmer directement par rapport à un schéma de stockage relationnel. L&rsquo;objectif est de diminuer la quantité de code et les besoins en maintenance pour les applications orientées objet.</p>
<p>Plusieurs approches peuvent être utilisées avec Entity Framework pour accéder aux données. Dans notre cas, c’est l’approche Code First qui sera utilisée.</p>
<p>Cette approche permet de définir tout d’abord les objets dans le code, ensuite utiliser EF pour créer la base de données correspondante. </p>
<p><strong>NuGet</strong></p>
<p>NuGet est un gestionnaire de packages  .NET open source. Il est disponible comme une extension pour les environnements de développement .NET Visual Studio, SharpDevelop et est intégré par défaut dans la version 2 de WebMatrix. Il fournit au développeur une meilleure expérience pour la gestion des packages et dépendances, et élimine presque tous les défis d&rsquo;intégration d&rsquo;une bibliothèque tierce open source ou gratuite dans un projet .NET.</p>
<p>Lire mon tutoriel sur <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/">la présentation de NuGet</a>.</p>
<p>Dans la seconde partie, nous allons créer l’application, installer Entity Framework à partir de NuGet et créer le modèle objet pour nos entités.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
