<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-210366430757604683</id><updated>2011-11-17T15:31:32.624-08:00</updated><category term='commande'/><category term='debug'/><category term='optimisation'/><category term='POO'/><category term='MVC'/><category term='net'/><category term='brushes'/><category term='TP'/><category term='cache'/><category term='check'/><category term='sequence'/><category term='contrainte'/><category term='IIS'/><category term='db2'/><category term='sql serveur'/><category term='oracle'/><category term='visual studio'/><category term='C#'/><category term='blogger'/><category term='sql'/><category term='as400'/><category term='active record'/><category term='extension'/><category term='.net'/><category term='SyntaxHighlighter'/><category term='entity framework'/><category term='intellisense'/><category term='nhibernate'/><title type='text'>Neric - New Techno</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-1249458397931123680</id><published>2010-12-28T04:55:00.000-08:00</published><updated>2010-12-28T04:55:32.614-08:00</updated><title type='text'>IndexOutOfRangeException: Index xx non valide - Nhibernate</title><content type='html'>Bonjour,&lt;br /&gt;&lt;br /&gt;La gestion de Nhibernate est très complexe ... et je me permet de noter l'erreur suivante qui intervient lors d'un Update : &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;System.IndexOutOfRangeException: Index 29 non valide pour ce OracleParameterCollection avec Count=29&lt;/blockquote&gt;&lt;br /&gt;C'est erreur est lié a la mise a jour de trop de champs (champs en doublons dans le fichier hbm.xml : mapping de Nhibernate). C'est souvent le cas lorsque vous avez un many-to-one pour une assoc et qu'il existe également une property sur le même champs.&lt;br /&gt;&lt;br /&gt;A ce niveau la, Nhibernate ne sait pas quel champs prendre, il utilise donc les deux ... et plante joyeusement ^^.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql"&gt;&lt;property name="Societe_id"&gt;&lt;/property&gt;&lt;br /&gt;[...]&lt;br /&gt;&lt;many-to-one name="SocieteAgence"  class="Societe" column="Societe_id"&gt;&lt;/many-to-one&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Dans mon cas, 29 correspond au nombre de champs (property) mappées dans mon fichier xml.&lt;br /&gt;&lt;br /&gt;Pour résoudre le problème, deux solutions sont disponibles : &lt;br /&gt;    1- Rajouter les attributs update="false" insert="false" sur la/les property &lt;br /&gt;&lt;br /&gt;    2- Supprimer soit le/les many-to-one soit la/les property &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Bonne journée&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-1249458397931123680?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/1249458397931123680/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/12/indexoutofrangeexception-index-xx-non.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/1249458397931123680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/1249458397931123680'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/12/indexoutofrangeexception-index-xx-non.html' title='IndexOutOfRangeException: Index xx non valide - Nhibernate'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-2567272335449950759</id><published>2010-08-30T02:06:00.000-07:00</published><updated>2010-08-30T02:06:10.422-07:00</updated><title type='text'>Incorporer une ressources dans une DLL</title><content type='html'>Bonjour,&lt;br /&gt;&lt;br /&gt;Petit billet pour expliquer comment incorporer n'importe qu'elle type de ressources (image, javascript, ...) dans un DLL puis en faire l'appel.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Problème :&lt;/b&gt; Comment faire si l'on a plusieurs sites web qui font appel à des même images et script en évitant la répétition ? (copier/coller)&lt;br /&gt;&lt;br /&gt;&lt;i&gt;1er élément&lt;/i&gt; : le mettre sur un serveur disponible n'importe ou. Du type &lt;a href="http://code.google.com/intl/fr-FR/apis/libraries/devguide.html#jquery"&gt;Google&lt;/a&gt; (http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js), qui en interne (en entreprise) n'est pas spécialement le bon choix, on s'orientera plus sur le meme exemple avec nos propres serveurs du style : http://entreprise.intern.fr/ajax/libs/jquery/1.4.2/jquery.min.js.&lt;br /&gt;&lt;br /&gt;Cette solution fonctionne parfaitement, mais ce n'est pas celle que j'ai retenu d'expliquer en détails. Le &lt;i&gt;2nd élément&lt;/i&gt; est la mise en place d'une DLL contenant les divers images, scripts nécessaire pour les sites web.&lt;br /&gt;&lt;br /&gt;Pour cela nous avons besoins de 2projets (ils peuvent être dans la meme solution ou non).&lt;br /&gt;1. ClassLibrary (bibliothèque de classes)&lt;br /&gt;2. SiteMvc&lt;br /&gt;&lt;br /&gt;Dans - ClassLibrary - ajouter une image a la racine du projet (ici worms.jpg) :&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_2FEubNf04N4/THt0A8fY-_I/AAAAAAAAAQg/GFpQ-YrJrV8/s1600/Dll_embeded1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_2FEubNf04N4/THt0A8fY-_I/AAAAAAAAAQg/GFpQ-YrJrV8/s320/Dll_embeded1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Dans les propriétés de l'image (ou de n'importe quelles ressources), changer l'action de génération de "Contenu" en "&lt;b&gt;Ressource incorporée&lt;/b&gt;" ! Cette étape est obligatoire !&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_2FEubNf04N4/THt0D9zTMcI/AAAAAAAAAQo/oNh9aLYt38s/s1600/Dll_embeded2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_2FEubNf04N4/THt0D9zTMcI/AAAAAAAAAQo/oNh9aLYt38s/s320/Dll_embeded2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Ensuite, ajouter une nouvelle classe au projet ClassLibrary (ou ouvrir celle par défaut : Class1.cs). Ajouter en entête de classe :&lt;br /&gt;&lt;pre class="brush:c#"&gt;[assembly: System.Web.UI.WebResource("ClassLibrary.worms.jpg", "image/jpg")]&lt;br /&gt;namespace ClassLibrary&lt;br /&gt;{&lt;br /&gt;    public class Class1&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Attention, la casse et le namespace/dossier sont très important, sinon depuis vos autres projets vous ne pourrez pas faire l'appel correctement !&lt;br /&gt;Compiler votre 1er projet, il ne doit pas avoir d'erreur.&lt;br /&gt;&lt;br /&gt;Maintenant sur votre 2nd projet, ajoutez la référence vers votre DLL ainsi créer. Et depuis l'une de vos vue, ajouter le code suivant pour faire appel a notre image (worms.jpg)&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;&amp;lt; img src="&amp;lt; % = ClientScript.GetWebResourceUrl(typeof(ClassLibrary.Class1), "ClassLibrary.worms.jpg") % &amp;gt;" / &amp;gt; &lt;/pre&gt;&lt;br /&gt;Compilez/Exécuter, tadaaaaaaaa magique l'image des Worms s'affiche sur votre navigateur. Si vous regardez dans le source de la page vous devriez voir l'url peu commune : &lt;br /&gt;&lt;br /&gt;&amp;lt; img src="/WebResource.axd?d=haVvUhxQKye3YgyVc9g8l32EYKRgja8RJmuPLLUPaamPyZ8Eyx76lCDu-nUPvlKb0&amp;amp;t=634187628689941128" / &amp;gt;&lt;br /&gt;&lt;br /&gt;Voila, c'est tout pour l'instant, j'espère que vous avez appris quelque chose, et que cela vous a servi :)&lt;br /&gt;&lt;br /&gt;Coding4Fun&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-2567272335449950759?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/2567272335449950759/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/08/incorporer-une-ressources-dans-une-dll.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/2567272335449950759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/2567272335449950759'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/08/incorporer-une-ressources-dans-une-dll.html' title='Incorporer une ressources dans une DLL'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2FEubNf04N4/THt0A8fY-_I/AAAAAAAAAQg/GFpQ-YrJrV8/s72-c/Dll_embeded1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-904096274327897564</id><published>2010-08-26T00:30:00.000-07:00</published><updated>2010-08-26T00:30:48.922-07:00</updated><title type='text'>Gestion des Type Enum C#</title><content type='html'>Bonjour a tous !&lt;br /&gt;&lt;br /&gt;De retour de vacances, en forme pour de nouveau épisode de code sur mon Blog ^^. J'espère que pour vous que vos vacances se sont bien passé et que vous avez pu vous reposez et profitez du soleil.&lt;br /&gt;&lt;br /&gt;Un petit billet pour faire quelques explication sur les Enum en C#.&lt;br /&gt;&lt;br /&gt;Ma question initial était de pouvoir avoir des types défini et comparable en string. Cependant a ma connaissance les Enums n'etaient que comparable avec des int de cette manière :&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;private enum InputType&lt;br /&gt;{&lt;br /&gt;    Checkbox,&lt;br /&gt;    Hidden,&lt;br /&gt;    File,&lt;br /&gt;    Password,&lt;br /&gt;    Radio,&lt;br /&gt;    Reset,&lt;br /&gt;    Submit,&lt;br /&gt;    Text&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;... InputType.Text == 7 ...&lt;/pre&gt;&lt;br /&gt;Or, ce que je souhaite c'est de pouvoir afficher le texte de mon Enum (et non la valeur) : &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;Console.WriteLine("Le champ Text : " + InputType.Text)&lt;br /&gt;// produit : Le champ Text : 7&lt;/pre&gt;&lt;br /&gt;Pour cela, il faut utiliser les méthodes présentes dans System.Enum : (2 essentiellement)&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;// Récupération de tous les textes de l'enum en question&lt;br /&gt;var tab = System.Enum.GetNames(typeof(InputType));&lt;br /&gt;// Récupération du texte de l'enum donné&lt;br /&gt;var elm = System.Enum.GetName(typeof(InputType), InputType.Checkbox);&lt;/pre&gt;&lt;br /&gt;Cependant, une méthode plus courte existe, l'utilisation du .ToString() sur le type donné. Néanmoins, l'intellissence de Visual Studio (2008 - C# 3.5) note que cette méthode est désapprouvée et qu'il faut utiliser System.Enum.ToString() ?!&lt;br /&gt;&lt;br /&gt;Ça marche très bien comme cela : &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;string val = InputType.Text.ToString();&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-904096274327897564?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/904096274327897564/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/08/gestion-des-type-enum-c.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/904096274327897564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/904096274327897564'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/08/gestion-des-type-enum-c.html' title='Gestion des Type Enum C#'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-2772293441114550848</id><published>2010-07-09T06:51:00.000-07:00</published><updated>2010-07-09T06:52:05.134-07:00</updated><title type='text'>Gestion des paramètres culturel MVC Asp.net</title><content type='html'>Bonjour,&lt;br /&gt;&lt;br /&gt;Petite news bien pratique, la gestion de la culture sur un site MVC en Asp.Net.&lt;br /&gt;&lt;br /&gt;Dans mon cas, je travail en local (dev) sur mon Poste Windows, en français. Or lorsque je déploie il n'est pas toujours évident de retrouver les paramètre culturel identique a son poste de travail.&lt;br /&gt;&lt;br /&gt;Pour cela, il suffit de rajouter ses quelques lignes dans le fichier Global.asax.cs&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;/// &lt;summary&gt;&lt;br /&gt;/// Begin Request début de requete HTTP sur l'application&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;/// &lt;param name="sender"&gt;&lt;/param&gt;/// &lt;param name="e"&gt;&lt;/param&gt;protected void Application_BeginRequest(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;    HttpCookie cookie = Request.Cookies["CultureInfo"];&lt;br /&gt;&lt;br /&gt;    if (cookie != null &amp;&amp; cookie.Value != null)&lt;br /&gt;    {&lt;br /&gt;      Thread.CurrentThread.CurrentUICulture = new CultureInfo(cookie.Value);&lt;br /&gt;      Thread.CurrentThread.CurrentCulture = new CultureInfo(cookie.Value);&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    {&lt;br /&gt;      Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");&lt;br /&gt;      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");&lt;br /&gt;    }&lt;br /&gt;}        &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-2772293441114550848?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/2772293441114550848/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/07/gestion-des-parametres-culturel-mvc.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/2772293441114550848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/2772293441114550848'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/07/gestion-des-parametres-culturel-mvc.html' title='Gestion des paramètres culturel MVC Asp.net'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-6443815364443358078</id><published>2010-06-09T08:07:00.000-07:00</published><updated>2010-06-09T08:09:48.023-07:00</updated><title type='text'>Ne pas mettre a jour une table/entité avec Nhibernate</title><content type='html'>Bonjour a tous,&lt;br /&gt;&lt;br /&gt;Aujourd'hui je me suis confronté a un&amp;nbsp;problème&amp;nbsp;de mise a jour par&amp;nbsp;Nhibernate. Je m'explique, j'ai un traitement qui récupère/parcours plusieurs objets/entités mappées depuis une vue (oracle) bien spécifique (jointures...).&lt;br /&gt;&lt;br /&gt;Le souci c'est que je modifie les enregistrements de cette vue pour effectuer un certain nombre de&amp;nbsp;contrôle. Suite a ces tests, j'ai une opération de suppression (delete) ou mise a jour (update). Pour ces deux commandes, je stipule deux choses sur la session :&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;this.Session.Update(entite);&lt;br /&gt;this.Session.Flush();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Or dans mon cas&amp;nbsp;j'obtiens&amp;nbsp;une erreur sur un update non souhaité du type :&amp;nbsp;&lt;/div&gt;&lt;pre class="brush:sql"&gt;NHibernate: UPDATE vue_qui_va_bien SET champ1 = :p0 WHERE id= :p1;:p0 = '00000', :p1 = 123&lt;br /&gt;&lt;/pre&gt;Deux solutions se présente alors pour la gestion des mise a jour des tables et objets.&lt;br /&gt;&lt;br /&gt;1° Lecture seule - Readonly sur tout la table&lt;br /&gt;&lt;pre class="brush:xml"&gt;&lt;class dynamic-update="true" mutable="false" table="vue_qui_va_bien "&gt;&lt;/class&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;En précisant le terme mutable="false", cela&amp;nbsp;précise&amp;nbsp;à Nhibernate de ne pas mettre a jour cette table (vue). Aucune commande Update ou Delete ne sera effectué ! Nickel c'est ce que je voulais.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dil.univ-mrs.fr/~massat/docs/hibernate-3.1/reference/fr/html/mapping.html#mapping-declaration-class"&gt;http://www.dil.univ-mrs.fr/~massat/docs/hibernate-3.1/reference/fr/html/mapping.html#mapping-declaration-class&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; mutable (optionnel, vaut true par défaut) : Spécifie que des instances de la classe sont (ou non) immuables.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2° Lecture seule - Readonly sur un ou plusieurs enregistrements&lt;br /&gt;&lt;br /&gt;En précisant le terme update="false" sur le ou les champs en question. Nhibernate ne fera pas de mise a jour si celui ci est modifié.&lt;br /&gt;&lt;pre class="brush:xml"&gt;&lt;property name="champ1" update="false"&gt;&lt;/property&gt;&lt;br /&gt;&lt;/pre&gt;En esperant que cela vous aide dans vos développements avec Nhiberate !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-6443815364443358078?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/6443815364443358078/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/06/ne-pas-mettre-jour-une-tableentite-avec.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/6443815364443358078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/6443815364443358078'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/06/ne-pas-mettre-jour-une-tableentite-avec.html' title='Ne pas mettre a jour une table/entité avec Nhibernate'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-5350725312526908421</id><published>2010-04-20T05:38:00.000-07:00</published><updated>2010-04-20T05:42:16.571-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='nhibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='net'/><title type='text'>Clé composite, mapping et class avec Nhibernate</title><content type='html'>Il vous est peut etre déja arrivé d'essayer de mapper une table qui ne contient aucune clé primaire (ou alors qui est composé). Pour ma part, hier cela m'est arrivé !&lt;br /&gt;C'est ce que je vais essayer de décrire dans les étapes suivantes.&lt;br /&gt;&lt;br /&gt;Lors de l'execution et du mapping de NHibernate, logiquement (sans mettre de clé primaire dans votre fichier xml), vous devriez tomber sur ce message : &lt;br /&gt;- “composite-id class must override Equals()”&lt;br /&gt;- “composite-id class must override GetHashCode()”&lt;br /&gt;&lt;br /&gt;Pour corriger cette erreur, il faut absoluement avoir une clé primaire. Dans notre cas, elle sera composée (de Contrat_ID et Code_Agn).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Voici notre mapping:&lt;/b&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&lt;hibernate-mapping assembly="DomainModel" namespace="DomainModel.Models" xmlns="urn:nhibernate-mapping-2.2"&gt;&lt;br /&gt;&lt;br /&gt;&lt;class dynamic-update="true" name="Allegement" table="CTR_ALLEGEMENTS"&gt;&lt;br /&gt;&lt;br /&gt;&lt;cache usage="read-write"&gt;&lt;/cache&gt;&lt;br /&gt;&lt;br /&gt;&lt;composite-id&gt;&lt;br /&gt;&lt;key-property name="Contrat_ID"&gt;&lt;/key-property&gt;&lt;br /&gt;&lt;key-property name="Code_Agn"&gt;&lt;/key-property&gt;&lt;br /&gt;&lt;/composite-id&gt;&lt;br /&gt;&lt;br /&gt;&lt;property name="Lot_Paie"&gt;&lt;/property&gt;&lt;br /&gt;&lt;property name="Montant_ALLGT_1"&gt;&lt;/property&gt;&lt;br /&gt;&lt;br /&gt;&lt;/class&gt;&lt;br /&gt;&lt;br /&gt;&lt;/hibernate-mapping&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Notre classe : &lt;/b&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;public class Allegement&lt;br /&gt;{&lt;br /&gt;    public virtual string Contrat_ID { get; set;}&lt;br /&gt;    public virtual string Lot_Paie { get; set;}&lt;br /&gt;    public virtual string Montant_ALLGT_1 { get; set;}&lt;br /&gt;    public virtual string Code_Agn { get; set; }&lt;br /&gt;&lt;br /&gt;    // nécessaire lors des clés composites&lt;br /&gt;    public override bool Equals(object obj)&lt;br /&gt;    {&lt;br /&gt;        if (obj == null)&lt;br /&gt;            return false;&lt;br /&gt;&lt;br /&gt;        Allegement a = obj as Allegement;&lt;br /&gt;        if (a == null)&lt;br /&gt;            return false;&lt;br /&gt;&lt;br /&gt;        if (this.Contrat_ID == a.Contrat_ID &amp;amp;&amp;amp; this.Code_Agn == a.Code_Agn)&lt;br /&gt;            return true;&lt;br /&gt;        else&lt;br /&gt;            return false;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // necessaire lors des clés composites&lt;br /&gt;    public override int GetHashCode()&lt;br /&gt;    {&lt;br /&gt;        int hash = 666; // ce que l'on veux &lt;br /&gt;        hash += (null == this.Contrat_ID ? 0 : this.Contrat_ID.GetHashCode());&lt;br /&gt;        hash += (null == this.Code_Agn ? 0 : this.Code_Agn.GetHashCode());&lt;br /&gt;&lt;br /&gt;        return hash;&lt;br /&gt;    }&lt;br /&gt;}}&lt;/pre&gt;&lt;br /&gt;Les élements a retenir de cet exemple sont : &lt;br /&gt;- pas de mapping sans clé primaire&lt;br /&gt;- la redefinition des méthodes "Equals" et "GetHashCode", des classes de bases&lt;br /&gt;&lt;br /&gt;Pour plus d'information sur le mapping : &lt;a href="http://nhforge.org/doc/nh/en/index.html"&gt;http://nhforge.org/doc/nh/en/index.html&lt;/a&gt; dans la partie "5. Basic O/R Mapping"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-5350725312526908421?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/5350725312526908421/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/04/cle-composite-mapping-et-class-avec.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/5350725312526908421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/5350725312526908421'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/04/cle-composite-mapping-et-class-avec.html' title='Clé composite, mapping et class avec Nhibernate'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-6682800727205070559</id><published>2010-04-13T05:21:00.000-07:00</published><updated>2010-04-13T05:22:23.685-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sequence'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='nhibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Récupération valeur d'une séquence Oracle avec NHibernate</title><content type='html'>Bonjour à tous,&lt;br /&gt;&lt;br /&gt;Aujourd'hui je vais vous présentez comment&amp;nbsp;récupérer&amp;nbsp;une valeur d'une séquence oracle (SEQ_NAME.NEXTVAL) à l'aide de NHibernate sans écrire la&amp;nbsp;requête&amp;nbsp;SQL. A vrai dire l'information n'est pas facile a dénicher sur le net.&lt;br /&gt;&lt;br /&gt;Donc voici les quelques lignes de code qui permettent de&amp;nbsp;récupérer&amp;nbsp;la nouvelle valeur :&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;NHibernate.Dialect.Oracle10gDialect dial = new NHibernate.Dialect.Oracle10gDialect();&lt;br /&gt;string sqlString = dial.GetSequenceNextValString("SEQ_NAME"); // génère Select SEQ_NAME.NEXVAL FROM DUAL&lt;br /&gt;&lt;br /&gt;ISQLQuery sqlQuery = _session.CreateSQLQuery(sqlString);&lt;br /&gt;return sqlQuery.UniqueResult().ToString();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;C'est&amp;nbsp;plutôt&amp;nbsp;simple, et donc il est facile&amp;nbsp;d'étendre&amp;nbsp;vos objets pour rendre cette partie un peu plus générique ;)&lt;br /&gt;&lt;br /&gt;Bonne journée à tous&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-6682800727205070559?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/6682800727205070559/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/04/recuperation-valeur-dune-sequence.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/6682800727205070559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/6682800727205070559'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/04/recuperation-valeur-dune-sequence.html' title='Récupération valeur d&apos;une séquence Oracle avec NHibernate'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-1098203529378231386</id><published>2010-04-06T07:19:00.000-07:00</published><updated>2010-04-06T07:25:45.835-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='POO'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Concept Objet : quelques rappels ...</title><content type='html'>Bonjour,&lt;br /&gt;&lt;br /&gt;Aujourd'hui je vous propose un petit billet de "rappel" sur les concepts de la programmation orientée objet (POO). Qui je doit le reconnaitre m'était sorti de la tête.&lt;br /&gt;En effet, je ne faisait que du "procédurale" (en asp.net c# 1.1) ... les concepts de base se sont vite oubliés.&lt;br /&gt;Mais désormais je réfléchi sur les architectures (Asp.Net MVC 3.5) et force est de constater que les concepts obscures (et chiants ?) vu en cours pendant mes études, deviennent des concepts tout à fait géniaux. Dès lors ou l'on comprend réellement leur application, tout parait bien plus "naturel".&lt;br /&gt;&lt;br /&gt;Je vais essayer de vous présenter les différentes méthodes que je côtoie actuellement. Cela me permet, d'une part d'une part de mieux appréhender le sujet, et d'autre part de le récupérer sur le blog dans le cas ou j'aurai un trou de mémoire. (ce qui arrive malheureusement)&lt;br /&gt;&lt;br /&gt;Mots clés :&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;override&lt;/b&gt; :&lt;i&gt; notifie que la méthode (ou attribut) est réécrit/redéfini dans la classe fille&lt;/i&gt;&lt;br /&gt;- &lt;b&gt;Virtual &lt;/b&gt;: &lt;i&gt;permet de réécrire (c'est optionnel) la méthode dans une classe fille grace au mot clé override&lt;/i&gt;&lt;br /&gt;- &lt;b&gt;abstract &lt;/b&gt;: &lt;i&gt;force la classe fille de réecrire la méthode (override). Attention, nécessite que la classe mère soit noté abstract également.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Exemple : &lt;br /&gt;&lt;pre class="brush:c#"&gt;public abstract class Service&amp;lt; T &amp;gt;     // "T" : Generic - Correspond a un modèle&lt;br /&gt;{&lt;br /&gt;   protected Repository repo;&lt;br /&gt;&lt;br /&gt;   public virtual T FindOne(object id)&lt;br /&gt;   {&lt;br /&gt;      return repo.FindOne&amp;lt; T &amp;gt;(id);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public abstract void Save(T entite);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class Commune_Service : Service&amp;lt; commune &amp;gt;&lt;br /&gt;{&lt;br /&gt;   // obligatoire : ne compile pas si elle n'est pas définie&lt;br /&gt;   public override void Save(Commune entite) &lt;br /&gt;   {&lt;br /&gt;      throw new NotImplementedException();&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Visual Studio vous apporte un coup de pouce : &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_2FEubNf04N4/S7tENT76a9I/AAAAAAAAAOk/AXeO0F649rI/s1600/Abscract.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="261" src="http://1.bp.blogspot.com/_2FEubNf04N4/S7tENT76a9I/AAAAAAAAAOk/AXeO0F649rI/s320/Abscract.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-1098203529378231386?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/1098203529378231386/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/04/concept-objet-quelques-rappels.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/1098203529378231386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/1098203529378231386'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/04/concept-objet-quelques-rappels.html' title='Concept Objet : quelques rappels ...'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2FEubNf04N4/S7tENT76a9I/AAAAAAAAAOk/AXeO0F649rI/s72-c/Abscract.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-128258225593633361</id><published>2010-02-17T08:04:00.000-08:00</published><updated>2010-02-17T08:06:47.060-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Respect nomenclature MVC</title><content type='html'>Bonjour,&lt;br /&gt;&lt;br /&gt;Un petit billet rapide pour vous méfier des syntaxes sur MVC. En effet, j'ai été confronté a un problème très bête, mais lorsque l'on n'est pas habitué a MVC on peux chercher longtemps l'erreur.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Voici l'erreur :&lt;/b&gt;&lt;br /&gt;&lt;div class="myblock"&gt;System.ArgumentException: The parameters dictionary contains a null entry for parameter 'idCategorie' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Cat(Int32)' in 'SiteArticle.UI.Controllers.ArticleController'. To make a parameter optional its type should be either a reference type or a Nullable type.&lt;br /&gt;Nom du paramètre : parameters&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Accès : &lt;/b&gt;&lt;br /&gt;http://localhost:53809/Article/Cat/3&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code : &lt;/b&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;public ActionResult Cat(int idCategorie)&lt;br /&gt;{&lt;br /&gt;    IEnumerable&lt; article &gt; IEArticle = this._service.ListArticles(idCategorie);&lt;br /&gt;&lt;br /&gt;    if (IEArticle.Count() &gt; 0)&lt;br /&gt;        return View(IEArticle);&lt;br /&gt;    else&lt;br /&gt;        return View("NotFound");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;En fait, le problème est simpliste... dans votre route (Global.asax) vous avez défini la règle &lt;br /&gt;suivante (enfin MVC de microsoft ?!) :&lt;br /&gt;&lt;pre class="brush:c#"&gt;routes.MapRoute(&lt;br /&gt;    "Default",                                              // Route name&lt;br /&gt;    "{controller}/{action}/{id}",                           // URL with parameters&lt;br /&gt;    new { controller = "Article", action = "Index", id = "" }  // Parameter defaults&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Depuis ce routage, le nom de la variable est obligatoirement "id" si vos méthodes de vos controllers ne respectent pas cette nomenclature vous aurez le message d'erreur.&lt;br /&gt;&lt;br /&gt;C'est tout bete, mais on peux chercher parfois pendant des heures pourquoi on a ce type de probleme !&lt;br /&gt;&lt;br /&gt;Enjoy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-128258225593633361?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/128258225593633361/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/02/respect-nomenclature-mvc.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/128258225593633361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/128258225593633361'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/02/respect-nomenclature-mvc.html' title='Respect nomenclature MVC'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-5866601620056195869</id><published>2010-02-17T06:25:00.000-08:00</published><updated>2010-02-17T06:27:06.355-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='nhibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Mise à jour partielle d'entités NHibernate et MVC</title><content type='html'>Bonjour,&lt;br /&gt;&lt;br /&gt;Suite a des petits problèmes de compréhension de NHibernate et MVC sur la modification des objets, je me permet de mettre un petit billet pour expliquer mes problèmes et pour montrer comment je les aient résolus.&lt;br /&gt;&lt;br /&gt;Initialement dans mon controller, j'ai une méthode en POST qui souhaite mettre a jour un article :&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;// fonctionne si tous les champs du formulaire doivent etre mise a jour or dans mon cas, la date de création/modif&lt;br /&gt;// ne doivent pas etre mis a jour !&lt;br /&gt;[AcceptVerbs(HttpVerbs.Post)]&lt;br /&gt;public ActionResult Edit(Article articleToEdit) &lt;br /&gt;{&lt;br /&gt;    if (this._service.EditArticle(articleToEdit))&lt;br /&gt;        return RedirectToAction("Index");&lt;br /&gt;    return View();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Cela fonctionne bien, sauf que pour mon article en édition, je n'ai pas rempli de date de création, de ce fait, l'objet "articleToEdit" a comme "01/01/0001" en valeur d'attribut datecreation.&lt;br /&gt;&lt;br /&gt;Pour mettre a jour un article, il faut récupéré l'identifiant de l'article et travailler avec ce dernier pour le mettre a jour.&lt;br /&gt;&lt;pre class="brush:c#"&gt;[AcceptVerbs(HttpVerbs.Post)]&lt;br /&gt;public ActionResult Edit(int id, FormCollection collection)&lt;br /&gt;{&lt;br /&gt;    Article articleToEdit = this._service.GetArticle(id);&lt;br /&gt;    UpdateModel(articleToEdit);&lt;br /&gt;&lt;br /&gt;    if (this._service.EditArticle(articleToEdit))&lt;br /&gt;        return RedirectToAction("Index");&lt;br /&gt;    return View();     &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;En fait, on va tout d'abord récuperer l'article a éditer, et à l'aide de la méthode "UpdateModel" (implémentée par le controller), cela nous permet de mettre a jour notre articleToEdit avec les informations de notre formulaire.&lt;br /&gt;En débuggage on le voit tres bien :&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Avant :&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_2FEubNf04N4/S3v75qgOVDI/AAAAAAAAAOQ/ax1XgJinnvM/s1600-h/PostArticle1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="166" src="http://2.bp.blogspot.com/_2FEubNf04N4/S3v75qgOVDI/AAAAAAAAAOQ/ax1XgJinnvM/s400/PostArticle1.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;Apres :&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_2FEubNf04N4/S3v78M5KZGI/AAAAAAAAAOY/ER1lCvhk5Vc/s1600-h/PostArticle2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="136" src="http://4.bp.blogspot.com/_2FEubNf04N4/S3v78M5KZGI/AAAAAAAAAOY/ER1lCvhk5Vc/s400/PostArticle2.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-5866601620056195869?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/5866601620056195869/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/02/mise-jour-partielle-dentites-nhibernate.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/5866601620056195869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/5866601620056195869'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/02/mise-jour-partielle-dentites-nhibernate.html' title='Mise à jour partielle d&apos;entités NHibernate et MVC'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2FEubNf04N4/S3v75qgOVDI/AAAAAAAAAOQ/ax1XgJinnvM/s72-c/PostArticle1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-6594032006356397602</id><published>2010-02-03T04:01:00.000-08:00</published><updated>2010-03-01T03:27:49.211-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='TP'/><category scheme='http://www.blogger.com/atom/ns#' term='active record'/><category scheme='http://www.blogger.com/atom/ns#' term='nhibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='net'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>TP Active Record - Articles/Catégorie [Compil] (Partie 4)</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span id="goog_1265198547426"&gt;&lt;/span&gt;&lt;span id="goog_1265198547427"&gt;&lt;/span&gt;&lt;a href="http://www.blogger.com/"&gt;&lt;/a&gt;Nous voici dans la 4nd section TP Active Record, ceci est l'explication pas à pas d'un TP de création de site Web permettant de créer des articles et d'en&amp;nbsp;associer&amp;nbsp;des catégories.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Voici la liste des articles disponibles :&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie.html"&gt;INFORMATIONS&amp;nbsp;NÉCESSAIRES (partie1)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie_03.html"&gt;ARCHITECTURE DE LA SOLUTION&amp;nbsp;(partie 2)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie_1131.html"&gt;DOMAINMODEL : METIER ET NHIBERNATE (partie 3)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/nous-voici-dans-la-4nd-section-tp.html"&gt;COMPILATION &amp;amp; TESTS&amp;nbsp;(partie 4)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;SITE MVC&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Dans cette partie nous allons verifier le fonctionnement du code que vous avons produit dans les parties précédentes.&lt;/div&gt;&lt;div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;div&gt;Notre base de travail avance et est "solide". Nous allons effectuer maintenant quelques vérifications. Premièrement, la compilation, &amp;nbsp;en toute logique, le projet DomainModel doit pouvoir se générer sans erreurs.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Afin de pouvoir tester simplement notre " Model " nous allons rajouter un nouveau projet de type Console à notre solution, nommez la " WinConsole " par exemple.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1. Commençons par ajouter la référence à notre projet DomainModel.&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_2FEubNf04N4/S2lj-uXRxLI/AAAAAAAAANE/oF1BuLTc1Zs/s1600-h/12.RefProjet.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_2FEubNf04N4/S2lj-uXRxLI/AAAAAAAAANE/oF1BuLTc1Zs/s320/12.RefProjet.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;2.Ajouter également la référence aux DLL suivantes :&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Castle.ActiveRecord.dll (fonction de config générale)&lt;/li&gt;&lt;li&gt;NHibernate.dll&lt;/li&gt;&lt;li&gt;NHibernate.ByteCode.Castle.dll (fonctions appelées depuis ActiveRecord)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;3. Namespaces utiles (using)&lt;/b&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;using DomainModel.Models;&lt;br /&gt;using Castle.ActiveRecord;&lt;br /&gt;using Castle.ActiveRecord.Framework.Config;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;4. Configuration de l'application pour ActiveRecord :&lt;/b&gt;&lt;br /&gt;Ensuite, il faut décrire les éléments de connexion pour la partie base de données. Cette configuration s'effectue depuis un fichier Xml, on stipule la chaine de connexion, le mode de connexion, le proxy ...&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&lt;activerecord&gt;&lt;br /&gt;  &lt;config&gt;&lt;br /&gt;    &lt;add key="connection.driver_class" value="NHibernate.Driver.OracleClientDriver"&gt;&lt;/add&gt;&lt;br /&gt;    &lt;add key="dialect" value="NHibernate.Dialect.Oracle10gDialect"&gt;&lt;/add&gt;&lt;br /&gt;    &lt;add key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider"&gt;&lt;/add&gt;&lt;br /&gt;    &lt;add key="connection.connection_string" value="Data Source=WEBLYO.world;User ID=admin;Password=123;"&gt;&lt;/add&gt;&lt;br /&gt;    &lt;add key="show_sql" value="true"&gt;&lt;/add&gt;&lt;br /&gt;    &lt;add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle"&gt;&lt;/add&gt;&lt;br /&gt;  &lt;/config&gt;&lt;br /&gt;&lt;/activerecord&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Maintenant coté code C#, il faut relier le fichier de configuration ainsi créer pour l'associer a notre application a proprement parler. Pour cela, il faut instancier un " XmlConfigurationSource " qui pointe ver le fichier XML.&lt;br /&gt;Après ca, il faut activer l'ActiveRecord, en précisant quelles entités il faut démarrer. Ceci s'effectuer grâce a la 2nd ligne simpliste (utilisation de typeof)&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;XmlConfigurationSource source = new XmlConfigurationSource("ActiveRecord.xml");&lt;br /&gt;&lt;br /&gt;ActiveRecordStarter.Initialize(source, typeof(Article), typeof(Categorie));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;5. Mais la base de données dans tout ca ?!&lt;/b&gt;&lt;br /&gt;On y arrive ! En fait, a ce niveau la, on va demander a NHibernate et ActiveRecord de nous générer automatiquement le script/schéma de la base de données (Séquences, tables, contraintes…). Bien entendu, ce n'est pas spécialement le mode de fonctionnement à faire lors de " vrais " développements professionnel, mais cela permet de vérifier le schéma et de me faire faire par le code rapidement (autre avantage  c'est aussi de pouvoir le régénérer). A ce niveau la, on ne se souci pas de comment les tables sont créées (on va laisser le schéma de NHibernate par défaut, tablespace, extends …)&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;ActiveRecordStarter.GenerateCreationScripts("monScript.sql");&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Attention &lt;/b&gt;: si vous voyez sur des sites la fonction &lt;i&gt;ActiveRecordStarter.CreateSchema();&lt;/i&gt; méfiez vous !!! Cette fonction créer &lt;b&gt;DIRECTEMENT &lt;/b&gt;le schéma dans votre instance de base de données préciser dans votre fichier de configuration.&lt;br /&gt;&lt;br /&gt;Si vous aller maintenant dans votre répertoire de génération " /bin/ " vous devrez retrouver le fichier " monScript.sql " contenant toutes les instructions SQL pour créer votre schéma. Ouvrez votre éditeur préféré (Toad) et lancer les requêtes SQL.&lt;br /&gt;A ce niveau la vous pouvez rajouter quelques données dans vos tables histoire de pouvoir parcourir dans les futurs exemples.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Un 1er ajout dans la base de données (mode console)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Retournons donc à notre petit programme console pour ajouter un petit article à notre base de données pour vérifier le fonctionnement entre NHibernate, ActiveRecord et Oracle. Pour cela rajouter ces quelques lignes (remarquez au passage qu'elles ne méritent que peu d'explication tant celles-ci sont simples ;)) :&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;// 2° Création d'un article&lt;br /&gt;Article monArticle = new Article();&lt;br /&gt;monArticle.Auteur = "Eric";&lt;br /&gt;monArticle.Titre = "Lorem ipsum ...";&lt;br /&gt;monArticle.Descriptif = "&lt;br /&gt;Pellentesque habitant [..] metus&lt;br /&gt;";&lt;br /&gt;&lt;br /&gt;monArticle.Save();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Si vous générez votre solution et que vous démarrez le projet console en débogage vous devriez obtenir ce genre d’état : &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_2FEubNf04N4/S2lmys1XmiI/AAAAAAAAANM/M4a7quJ1zG0/s1600-h/14.ShowSQL.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_2FEubNf04N4/S2lmys1XmiI/AAAAAAAAANM/M4a7quJ1zG0/s320/14.ShowSQL.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Dans notre application console, nous voyons ce que NHibernate génère en terme de SQL pour nous grâce a l’héritage de &lt;i&gt;ActiveRecordBase&lt;/i&gt;, et la fonction Save(). Deux étapes sont nécessaires : &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Récupération du numéro de séquence (SEQ_EBN_ARTICLES)&lt;/li&gt;&lt;li&gt;Requête d’insertion dans notre table Articles à l’aide de « parameters »&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;A ce niveau la, dans cette exemple ultra simple, NHibernate fait très bien son job, et même plus pour ma part, car je n’aurai pas pensé qu’il génèrerait une requête SQL avec l’utilisation des « parameters ».&lt;br /&gt;Remarque : nous voyons les requêtes SQL car depuis notre fichier de configuration XML, nous avons précisé la balise &lt;i&gt;&amp;lt; add key="show_sql" value="true" / &amp;gt;&lt;/i&gt; indispensable lors du développement (à la différence des environnements de production) pour vérifier l’exactitude de requêtes (index, paramètres …)&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Un 1er parcours dans la base de données (mode console)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Maintenant que l'on sait comment rajouter des données, voyons un parcours simple. Grâce a &lt;i&gt;ActiveRecordBase &lt;/i&gt;on a, à disposition la " fonction " FindAll qui nous retourne un tableau d'article. Utilisons ce tableau pour parcourir l'ensemble des articles de notre base de données.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;//3° Parcours simple&lt;br /&gt;foreach( var article in Article.FindAll() )&lt;br /&gt;{&lt;br /&gt;    Console.WriteLine(article.Id + " - " + article.Titre);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Console.ReadLine();&lt;/pre&gt;&lt;br /&gt;&lt;div class="myblock"&gt;&lt;b&gt;Conclusion :&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;Dans cette partie vous avez appréhendé la notion simple de NHibernate avec l'aide d'ActiveRecord ! Le mapping depuis vos classes à l'aide des attributs. Et la création de bout de code permettant d'ajouter et lire des données dans Oracle.&lt;br /&gt;Vous allez donc maintenant entrer dans le vif du sujet qu'est la création du site web MVC en question grâce aux concepts vu précédemment. Nous allons également étendre certain concept tel que " Linq " et le principe de " Repository " (autrement dit, la séparation des couches).&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-6594032006356397602?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/6594032006356397602/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/02/nous-voici-dans-la-4nd-section-tp.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/6594032006356397602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/6594032006356397602'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/02/nous-voici-dans-la-4nd-section-tp.html' title='TP Active Record - Articles/Catégorie [Compil] (Partie 4)'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_2FEubNf04N4/S2lj-uXRxLI/AAAAAAAAANE/oF1BuLTc1Zs/s72-c/12.RefProjet.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-8282468951429858963</id><published>2010-02-03T03:39:00.000-08:00</published><updated>2010-02-03T04:03:30.941-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='TP'/><category scheme='http://www.blogger.com/atom/ns#' term='active record'/><category scheme='http://www.blogger.com/atom/ns#' term='nhibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='net'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>TP Active Record - Articles/Catégorie [NHibernate] (Partie 3)</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Nous voici dans la 3nd section TP Active Record, ceci est l'explication pas à pas d'un TP de création de site Web permettant de créer des articles et d'en&amp;nbsp;associer&amp;nbsp;des catégories.&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Voici la liste des articles disponibles :&lt;br /&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie.html"&gt;INFORMATIONS&amp;nbsp;NÉCESSAIRES (partie1)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie_03.html"&gt;ARCHITECTURE DE LA SOLUTION&amp;nbsp;(partie 2)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie_1131.html"&gt;DOMAINMODEL : METIER ET NHIBERNATE (partie 3)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/nous-voici-dans-la-4nd-section-tp.html"&gt;COMPILATION &amp;amp; TESTS&amp;nbsp;(partie 4)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;SITE MVC&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;A ce niveau la nous utiliserons le pattern &amp;nbsp;" ActiveRecord " de l'API Castle Project utilisant NHibernate. ActiveRecord est un design pattern qui permet de masquer la complexité des interactions avec la base de données en évitant d'écrire du code SQL&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Le gros avantage avec ce pattern c'est qu'il permet d'écrire aussi dans une seule et même classe le mapping base de données et la classe/l'objet métier. Je vous invite à lire l'article montrant les différences de fonctionnement entre " ActiveRecord " et un accès classique NHibernate (Mapping_NHibernate_2010-01 ...).&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;Ajout des références&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pour faire fonctionner " Castle " ainsi que NHibernate il est nécessaire d'ajouter à votre projet DomainModel un certain nombre de DLL.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;Castle.ActiveRecord.dll&lt;/li&gt;&lt;li&gt;Castle.ActiveRecord.Linq.dll&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_2FEubNf04N4/S2gm69XjlNI/AAAAAAAAAL0/T_C1Eixx028/s1600-h/07.References.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_2FEubNf04N4/S2gm69XjlNI/AAAAAAAAAL0/T_C1Eixx028/s320/07.References.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Depuis votre dossier Models, rajouter une 1ère classe " Article ". En entête de classe rajouter les namespaces (using) d'ActiveRecord.&lt;/div&gt;&lt;pre class="brush:c#"&gt;using Castle.ActiveRecord;&lt;br /&gt;using Castle.ActiveRecord.Linq;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;De ce fait, l’IntelliSense de VS, vous guide dans l’utilisation d’ActiveRecord.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_2FEubNf04N4/S2lShgQNIQI/AAAAAAAAAL8/HsIl39x81qE/s1600-h/08.IntellissenceActiveRecord1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_2FEubNf04N4/S2lShgQNIQI/AAAAAAAAAL8/HsIl39x81qE/s320/08.IntellissenceActiveRecord1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Les classes - Article/Catégorie&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Modèle&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Rappelons le principe de base de notre TP :&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Un article contient 0..* catégorie (tag).&lt;/li&gt;&lt;li&gt;Une catégorie (tag) est contenu par 1..* article&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_2FEubNf04N4/S2lTIUSyXGI/AAAAAAAAAMM/fWaZzskgDbI/s1600-h/08.UML.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_2FEubNf04N4/S2lTIUSyXGI/AAAAAAAAAMM/fWaZzskgDbI/s320/08.UML.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Article&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Dans cette partie nous allons décrire la classe Article. Un article contient donc :&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_2FEubNf04N4/S2lTRwlV2jI/AAAAAAAAAMU/gKEXi0D0AjU/s1600-h/09.Articles.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_2FEubNf04N4/S2lTRwlV2jI/AAAAAAAAAMU/gKEXi0D0AjU/s320/09.Articles.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Se traduisant par la classe objet C# :&lt;/div&gt;&lt;pre class="brush:c#"&gt;public class Article&lt;br /&gt;{&lt;br /&gt;    public int Id { get; set; }&lt;br /&gt;    public string Titre { get; set; }&lt;br /&gt;    public string Descriptif { get; set; }&lt;br /&gt;    public DateTime DateCreation { get; set; }&lt;br /&gt;    public DateTime DateModification { get; set; }&lt;br /&gt;    public string Auteur { get; set; }&lt;br /&gt;}&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Catégorie&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Dans cette partie nous allons décrire la classe Catégorie. Une catégorie contient donc :&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_2FEubNf04N4/S2lTd0zgudI/AAAAAAAAAMc/pYvLl9FhTiw/s1600-h/10.Articles.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_2FEubNf04N4/S2lTd0zgudI/AAAAAAAAAMc/pYvLl9FhTiw/s320/10.Articles.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Se traduisant par la classe objet C# :&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:c#"&gt;public class Categorie&lt;br /&gt;{&lt;br /&gt;    public int Id { get; set; }&lt;br /&gt;    public string Nom { get; set; }        &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Article_Categorie&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Dans cette partie nous allons décrire la classe Article_Categorie. C'est l'association entre un article et une ou plusieurs catégories.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_2FEubNf04N4/S2lTncKhD5I/AAAAAAAAAMk/QI0sTpwLf0o/s1600-h/11.ArticleCategorie.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_2FEubNf04N4/S2lTncKhD5I/AAAAAAAAAMk/QI0sTpwLf0o/s320/11.ArticleCategorie.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Cette table en base de données n'a pas de représentation en classe. Elle se traduira " uniquement " par des attributs spécifiques dans les classes article et catégorie. Car depuis un article il est évident de récupérer la liste des catégories qui lui sont associées.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Mapping&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Pour que NHibernate puisse reconnaitre les champs et les tables il est obligatoire de renseigner un mapping. Ce dernier peux se faire de deux manières, soit en créant un fichier XML de mapping indiquant quelles tables correspondent à quelles classes, soit en " marquant " les fonctions et les attributs dans la classe directement.&lt;/div&gt;&lt;div style="text-align: left;"&gt;C'est cette dernière méthode que nous allons retenir et utiliser grâce à " ActiveRecord ".&lt;/div&gt;&lt;div style="text-align: left;"&gt;Il faut donc transformer nos classes comme ceci :&lt;/div&gt;&lt;pre class="brush:c#"&gt;[ActiveRecord(Table="EBN_ARTICLES")]    // Précise la table&lt;br /&gt;public class Article : ActiveRecordBase&amp;lt; article &amp;gt;&lt;br /&gt;{&lt;br /&gt;   [PrimaryKey(SequenceName="SEQ_EBN_ARTICLES")]&lt;br /&gt;   // Précise la séquence Oracle pour la primary key&lt;br /&gt;   public int Id { get; set; }&lt;br /&gt;   &lt;br /&gt;   [Property(Column="Titre")]   &lt;br /&gt;   // Précise le champs en BDD (inutile si identique)&lt;br /&gt;   public string Titre { get; set; }&lt;br /&gt;   [Property]&lt;br /&gt;   public string Descriptif { get; set; }&lt;br /&gt;   [Property]&lt;br /&gt;   public DateTime DateCreation { get; set; }&lt;br /&gt;   [Property]&lt;br /&gt;   public DateTime DateModification { get; set; }&lt;br /&gt;   [Property]&lt;br /&gt;   public string Auteur { get; set; }&lt;br /&gt;&lt;br /&gt;   // DOC : http://www.castleproject.org/activerecord/documentation/v1rc1/manual/attributedocs/Generated_HasAndBelongsToManyAttribute.html&lt;br /&gt;   // Map une relation plusieurs a plusieurs &lt;br /&gt;   [HasAndBelongsToMany( typeof(Categorie), RelationType.Bag, &lt;br /&gt;       Table="Article_Categorie", ColumnKey="Article_ID", ColumnRef="Categorie_ID" )]&lt;br /&gt;   public IList&amp;lt; categorie &amp;gt; Categories { get ; set ; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: auto;"&gt;&lt;a href="http://www.castleproject.org/activerecord/documentation/v1rc1/manual/attributedocs/Generated_HasAndBelongsToManyAttribute.html"&gt;Documentation complémentaire&lt;/a&gt; sur le [HasAndBelongsToMany]&lt;/div&gt;&lt;pre class="brush:c#"&gt;[ActiveRecord(Table="EBN_CATEGORIES")]&lt;br /&gt;public class Categorie : ActiveRecordBase&amp;lt; categorie &amp;gt;&lt;br /&gt;{&lt;br /&gt;    [PrimaryKey(SequenceName = "SEQ_EBN_CATEGORIES")]&lt;br /&gt;    public int Id { get; set; }&lt;br /&gt;    &lt;br /&gt;    [Property]&lt;br /&gt;    public string Nom { get; set; }        &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;Il est important de remarquer l'héritage de la classe d'ActiveRecord (ActiveRecordBase&lt;article&gt;) permettant d'accéder aux fonctions de base pour l'accès a la base de données, telle que base.Update(),base.Save(),base.Delete() …&lt;/article&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_2FEubNf04N4/S2lUTV1LQaI/AAAAAAAAAMs/veT7ari0Z18/s1600-h/13.ActiveRecordBase.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="197" src="http://4.bp.blogspot.com/_2FEubNf04N4/S2lUTV1LQaI/AAAAAAAAAMs/veT7ari0Z18/s320/13.ActiveRecordBase.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;C'est grâce à cet héritage que vous pourrez " manipuler " votre base de données.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-8282468951429858963?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/8282468951429858963/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie_1131.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/8282468951429858963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/8282468951429858963'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie_1131.html' title='TP Active Record - Articles/Catégorie [NHibernate] (Partie 3)'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2FEubNf04N4/S2gm69XjlNI/AAAAAAAAAL0/T_C1Eixx028/s72-c/07.References.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-2805774452164865173</id><published>2010-02-03T03:29:00.000-08:00</published><updated>2010-02-03T04:03:40.091-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='TP'/><category scheme='http://www.blogger.com/atom/ns#' term='active record'/><category scheme='http://www.blogger.com/atom/ns#' term='nhibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='net'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>TP Active Record - Articles/Catégorie [Archi] (Partie 2)</title><content type='html'>&lt;div style="text-align: justify;"&gt;Nous voici dans la 2nd section TP Active Record, ceci est l'explication pas à pas d'un TP de création de site Web permettant de créer des articles et d'en&amp;nbsp;associer&amp;nbsp;des catégories.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Voici la liste des articles disponibles :&lt;br /&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie.html"&gt;INFORMATIONS&amp;nbsp;NÉCESSAIRES (partie1)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie_03.html"&gt;ARCHITECTURE DE LA SOLUTION&amp;nbsp;(partie 2)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie_1131.html"&gt;DOMAINMODEL : METIER ET NHIBERNATE (partie 3)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/nous-voici-dans-la-4nd-section-tp.html"&gt;COMPILATION &amp;amp; TESTS&amp;nbsp;(partie 4)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;SITE MVC&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Nous allons décrire les étapes pour créer une solution depuis Visual Studio 2008 simple et pratique pour la réalisation de notre TP. Je rappel que cette solution n'est pas l'unique solution, mais me convient pour l'instant.&lt;/div&gt;&lt;div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;1. Pour commencer, ouvrez Visual Studio, et créez une nouvelle solution (vide)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_2FEubNf04N4/S2gU9yZUGUI/AAAAAAAAALE/ZZEyVasZrx4/s1600-h/01.NewProject.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_2FEubNf04N4/S2gU9yZUGUI/AAAAAAAAALE/ZZEyVasZrx4/s320/01.NewProject.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Ajouter un 1er projet - Bibliothèque de classes | DomainModel&lt;br /&gt;&lt;div&gt;&lt;div&gt;Ce projet contiendra :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; -&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;toutes votre couche métier (BLL : buisness logic layer)&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; -&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;votre accès à votre base de données (DAL : Data Access Layer)&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; -&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;et votre " mapping " (ORM Object / Relation Mapping)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_2FEubNf04N4/S2gVBKe538I/AAAAAAAAALM/D_SshdaqwvA/s1600-h/02.AjoutProjet.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_2FEubNf04N4/S2gVBKe538I/AAAAAAAAALM/D_SshdaqwvA/s320/02.AjoutProjet.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Ajouter maintenant à votre projet " DomainModel ", un nouveau dossier nommé Models. Vous pouvez également à cette étape ajouter un diagramme de classe a votre projet (ceci permettant de modéliser vos classes.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_2FEubNf04N4/S2gi-WO5-SI/AAAAAAAAALc/sZO-5bIUO-o/s1600-h/04.AddDossier.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_2FEubNf04N4/S2gi-WO5-SI/AAAAAAAAALc/sZO-5bIUO-o/s320/04.AddDossier.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;4.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Ajouter ensuite un 2nd projet &amp;nbsp;- Site Web Asp.Net MVC | SiteArticles&lt;/div&gt;&lt;div&gt;Ce projet est le site Web principal, il référence votre projet ci-dessus : " DomainModel ".&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_2FEubNf04N4/S2gVJAazElI/AAAAAAAAALU/U9P6zuIYHYk/s1600-h/03.AjoutProjetMVC.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_2FEubNf04N4/S2gVJAazElI/AAAAAAAAALU/U9P6zuIYHYk/s320/03.AjoutProjetMVC.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Remarque : On imagine donc bien à partir d'ici que l'on pourra rajouter des projets Winform, Console … en faisant référence uniquement au projet DomainModel (évitant ainsi de réécrire beaucoup de fonctions).&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;5.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Depuis le site, vous pouvez supprimer les 2 dossiers : App_Data et Models (ce sont les dossiers dans le cas ou vous ne faite pas 2 projets distincts pour l'accès aux données et la couche présentation. (comme beaucoup de TP sur le net …)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_2FEubNf04N4/S2gjFhH3cWI/AAAAAAAAALk/CFU4UTNnhGQ/s1600-h/05.DeleteFolder.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_2FEubNf04N4/S2gjFhH3cWI/AAAAAAAAALk/CFU4UTNnhGQ/s320/05.DeleteFolder.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;A ce niveau la, vous devriez avoir une solution contenant 2 projets, DomainModel et SiteArticle :&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_2FEubNf04N4/S2gjLb9I8JI/AAAAAAAAALs/9o5xzTkQb4U/s1600-h/06.ArchiOk.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_2FEubNf04N4/S2gjLb9I8JI/AAAAAAAAALs/9o5xzTkQb4U/s320/06.ArchiOk.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="myblock"&gt;&lt;div&gt;&lt;i&gt;Conclusion (Architecture de la solution) :&lt;/i&gt;&lt;/div&gt;&lt;div&gt;Cette 1ère partie expliquant rapidement l'architecture de la solution pour ce TP est volontairement un survol des choix que j'ai fait. Vous retrouverez l'explication détaillée pour cette solution dans un autre document cité en début de partie (Architecture_2010-01 ... )&lt;/div&gt;&lt;div&gt;En aucun cas c'est LA solution de référence valable pour l'ensemble des projets. Mais pour ma part je trouve c'est architecture relativement simple et compréhensible et surtout suffisamment souple pour réutiliser la logique métier à droite et gauche.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-2805774452164865173?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/2805774452164865173/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie_03.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/2805774452164865173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/2805774452164865173'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie_03.html' title='TP Active Record - Articles/Catégorie [Archi] (Partie 2)'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2FEubNf04N4/S2gU9yZUGUI/AAAAAAAAALE/ZZEyVasZrx4/s72-c/01.NewProject.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-350165022593368441</id><published>2010-02-03T02:54:00.000-08:00</published><updated>2010-02-03T04:03:50.387-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='TP'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='active record'/><category scheme='http://www.blogger.com/atom/ns#' term='nhibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>TP Active Record - Articles/Catégorie [Intro] (Partie 1)</title><content type='html'>&lt;div style="text-align: justify;"&gt;Bonjour a tous,&lt;br /&gt;&lt;br /&gt;Dans ce 1er TP, nous allons créer un site permettant de gerer des articles associés a des catégories. Un sujet classique, cas d'école, qui nous permettra de voir les différents concepts : NHibernate, MVC 3.5, Castle Active Record, Linq et bien d'autres.&lt;br /&gt;Voici le sommaire que je vous propose :&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie.html"&gt;INFORMATIONS&amp;nbsp;NÉCESSAIRES (partie1)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie_03.html"&gt;ARCHITECTURE DE LA SOLUTION&amp;nbsp;(partie 2)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie_1131.html"&gt;DOMAINMODEL : METIER ET NHIBERNATE (partie 3)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://nerictech.blogspot.com/2010/02/nous-voici-dans-la-4nd-section-tp.html"&gt;COMPILATION &amp;amp; TESTS&amp;nbsp;(partie 4)&lt;/a&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;SITE MVC&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;Création d’un site permettant de créer des articles d’un blog et d’ajouter des catégories à ses articles.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Informations nécessaires&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;API – Active Record :&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/castleproject/files/ActiveRecord/2.1/AR%202.1.1.zip/download"&gt;Sur le site de source forge.&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Documentation Castle Project :&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.castleproject.org/activerecord/documentation/index.html"&gt;http://www.castleproject.org/activerecord/documentation/index.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;API – NHibernate (incluse dans les sources de Active Record) : &lt;a href="http://nhforge.org/Default.aspx"&gt;http://nhforge.org/Default.aspx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Documentation NHibernate : &lt;a href="http://nhforge.org/Default.aspx"&gt;http://nhforge.org/Default.aspx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Génération UML : &lt;a href="http://yuml.me/diagram/scruffy/class/draw"&gt;http://yuml.me/diagram/scruffy/class/draw&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Visual Studio 2005 ou plus (VS 2008 utilisé pour le TP)&lt;/li&gt;&lt;li&gt;Oracle (ou autre base de données)&lt;/li&gt;&lt;li&gt;Du temps …&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Schéma de base de données&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_2FEubNf04N4/S2lXlvdQiyI/AAAAAAAAAM0/XicZoRNzmcQ/s1600-h/diagrammeClasse.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="236" src="http://2.bp.blogspot.com/_2FEubNf04N4/S2lXlvdQiyI/AAAAAAAAAM0/XicZoRNzmcQ/s400/diagrammeClasse.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Maquette&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_2FEubNf04N4/S2lXyDz7GFI/AAAAAAAAAM8/VT2iwLfOlf8/s1600-h/MaquetteArticle.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="245" src="http://3.bp.blogspot.com/_2FEubNf04N4/S2lXyDz7GFI/AAAAAAAAAM8/VT2iwLfOlf8/s400/MaquetteArticle.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;A ce niveau la nous avons juste poser le contexte de notre application, ainsi que les divers éléments que nous utiliserons pour réaliser ce TP.&lt;br /&gt;&lt;br /&gt;Pour la prochaine étape nous allons décrire comment architecturer la solution pour que ce soit simple et pratique d'utilisation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-350165022593368441?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/350165022593368441/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/350165022593368441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/350165022593368441'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/02/tp-active-record-articlescategorie.html' title='TP Active Record - Articles/Catégorie [Intro] (Partie 1)'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2FEubNf04N4/S2lXlvdQiyI/AAAAAAAAAM0/XicZoRNzmcQ/s72-c/diagrammeClasse.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-598118836433365555</id><published>2010-02-01T06:51:00.000-08:00</published><updated>2010-02-03T03:35:59.071-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='entity framework'/><category scheme='http://www.blogger.com/atom/ns#' term='nhibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Portage du tutoriel Contact Manager de Entity Framework à NHibernate (et Oracle)</title><content type='html'>De la même maniere que mon cher collègue &lt;a href="http://blog.pagesd.info/post/2009/11/13/Portage-du-tutoriel-Contact-Manager-sous-LINQ-to-SQL" target="_blank"&gt;Michel, sur son blog&lt;/a&gt;&amp;nbsp;(Linq To SQL). Je vais vous présentez comment migrer de Entity Framework à NHibernate + Oracle.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Tout d'abord les informations nécessaires&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Une base oracle disponible&lt;/li&gt;&lt;li&gt;Le &lt;a href="http://www.asp.net/learn/mvc/tutorial-29-cs.aspx" target="_blank"&gt;tutoriel de Microsoft sur le Contact Manager&lt;/a&gt; (la partie 4)&lt;/li&gt;&lt;li&gt;&lt;a href="http://nhforge.org/Default.aspx" target="_blank"&gt;NHibernate&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Du temps&lt;/li&gt;&lt;li&gt;de &lt;a href="https://www.hibernate.org/hib_docs/nhibernate/html/quickstart.html" target="_blank"&gt;l'aide sur NHibernate&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Création du modèle&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Tout de suite, ici il ne s'agit pas de faire du drag'n drop de vos tables avec de beaux object Visual Studio ! Il faut coder lignes par lignes notre modele de persistance.&lt;/div&gt;&lt;div&gt;Tout d'abord supprimez :&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;le fichier "modele" .edmx&lt;/li&gt;&lt;li&gt;les références inutiles&amp;nbsp;(System.Data.Entity)&lt;/li&gt;&lt;li&gt;le repository :&amp;nbsp;EntityContactManagerRepository.cs&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;1. Ajout de notre classe de base&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;A ce niveau, il n'y a pas de génération automatique de classe. Pour cela, ajouter a votre dossier "models" une nouvelle classe nommée "Contact.cs". Celle-ci contiendra tout simplement les attributs&amp;nbsp;représentant&amp;nbsp;la base de données.&lt;/div&gt;&lt;pre class="brush:c#"&gt;public class Contact&lt;br /&gt;{&lt;br /&gt;    public virtual int Id { get; set; }&lt;br /&gt;    public virtual string FirstName { get; set; }&lt;br /&gt;    public virtual string LastName { get; set; }&lt;br /&gt;    public virtual string Phone { get; set; }&lt;br /&gt;    public virtual string Email { get; set; }&lt;br /&gt;}&lt;/pre&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;2. Ajout du mapping&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Si vous vous&amp;nbsp;êtes&amp;nbsp;déjà quelques peu documenté sur NHibernate (et Hibernate&amp;nbsp;également), vous devez savoir que tout fonctionne par fichier de configuration xml. Le fichier de configuration xml, vous permet de dire a quelle classe correspond telle table et a quel attribut correspond tel champs de votre table. De plus merci de vous référé a ce &lt;a href="http://nerictech.blogspot.com/2010/01/nhibernate-et-les-sequences-oracle.html"&gt;billet sur l'explication des séquences&lt;/a&gt; avec NHibernate et Oracle.&lt;/div&gt;&lt;div&gt;Pour cela ajoutez un nouveau fichier xml, nommé Contact.hbm.xml&amp;nbsp;dans votre dossier "models".&lt;/div&gt;&lt;pre class="brush:xml"&gt;&lt;hibernate-mapping assembly="ContactManager" namespace="ContactManager.Models" xmlns="urn:nhibernate-mapping-2.2"&gt;&lt;br /&gt;&lt;br /&gt;  &lt;class dynamic-update="true" name="Contact" table="EBN_CONTACTS"&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;cache usage="read-write"&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;id column="Id" name="Id" type="integer"&gt;&lt;br /&gt;      &lt;generator class="native"&gt;SEQ_EBN_CONTACTS&lt;/generator&gt;&lt;br /&gt;    &lt;/id&gt;&lt;br /&gt;&lt;br /&gt;    &lt;property length="50" name="FirstName"&gt;&lt;/property&gt;&lt;br /&gt;    &lt;property length="50" name="LastName"&gt;&lt;/property&gt;&lt;br /&gt;    &lt;property length="50" name="Phone"&gt;&lt;/property&gt;&lt;br /&gt;    &lt;property length="255" name="Email"&gt;&lt;/property&gt;&lt;br /&gt;&lt;br /&gt;  &lt;/cache&gt;&lt;/class&gt;&lt;br /&gt;&lt;br /&gt;&lt;/hibernate-mapping&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;Important &lt;/span&gt;&lt;/b&gt;: Sur ce fichier xml (Contact.hbm.xml)&amp;nbsp;vous &lt;b&gt;devez&lt;/b&gt;&amp;nbsp;préciser les "actions de génération" en précisant que ce fichier est une &lt;b&gt;ressource incorporée&lt;/b&gt;, sans cela votre projet ne reconnaitra par votre mapping. De plus, si vous le souhaitez vous pouvez préciser le ou les schémas (xsd) pour faciliter&amp;nbsp;l'écriture&amp;nbsp;(Intellisence), pour cela cliquer sur le fichier et dans la&amp;nbsp;fenêtre&amp;nbsp;de propriétés XML&amp;nbsp;sélectionner&amp;nbsp;les 2 schémas dans votre dossier d'installation d'NHibernate (nhibernate-configuration.xsd et&amp;nbsp;nhibernate-mapping.xsd).&lt;/div&gt;&lt;div&gt;J'avais &lt;a href="http://nerictech.blogspot.com/2009/12/intellisense-visual-studio-2008-et.html" target="_blank"&gt;écrit un billet précisant cette manipulation&lt;/a&gt;, mais sur mon poste il semblerait que pour tout nouveau projet il faille préciser ces fichiers (dommage ?)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_2FEubNf04N4/S2biNF0blgI/AAAAAAAAAKs/kPPY4s0ssTU/s1600-h/MappingNH.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/_2FEubNf04N4/S2biNF0blgI/AAAAAAAAAKs/kPPY4s0ssTU/s200/MappingNH.jpg" width="137" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #073763;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Ajout de HttpModule&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Pour faire fonctionner NHibernate, il est nécessaire d'initialiser une "SessionFactory" et un "Session". C'est sur cette "Session" que toutes les actions en base de données se réalisent CRUD (Session.Update([...]),&amp;nbsp;Session.Delete([...]) ...)&lt;/div&gt;&lt;div&gt;Pour cela nous allons ajouter cette gestion de session a travers l'implementation de l'interface "IHttpModule", permettant entre autre de démarrer la session en début de requete (beginRequest) et de fermer la session en fin de requete de page (endRequest).&lt;/div&gt;&lt;div&gt;Ajoutons donc dans notre dossier "models", une classe&amp;nbsp;NHSessionPerRequest.cs qui&amp;nbsp;gèrera&amp;nbsp;ces actions.&lt;/div&gt;&lt;div&gt;Pensez, si vous ne l'avez pas déja fait a rajouter les références à NHibernate (NHibernate.dll)&lt;/div&gt;&lt;pre class="brush:c#"&gt;using NHibernate;&lt;br /&gt;using NHibernate.Context;&lt;br /&gt;using NHibernate.Cfg;&lt;br /&gt;&lt;br /&gt;public class NHSessionPerRequest : IHttpModule&lt;br /&gt;{&lt;br /&gt;       &lt;br /&gt;    private const string CurrentSessionKey = "nhibernate.current_session";&lt;br /&gt;    private static readonly ISessionFactory sessionFactory;&lt;br /&gt;&lt;br /&gt;    static NHSessionPerRequest()&lt;br /&gt;    {&lt;br /&gt;        sessionFactory = new Configuration().Configure().BuildSessionFactory();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static ISession GetCurrentSession()&lt;br /&gt;    {&lt;br /&gt;        HttpContext context = HttpContext.Current;&lt;br /&gt;        ISession currentSession = context.Items[CurrentSessionKey] as ISession;&lt;br /&gt;&lt;br /&gt;        if (currentSession == null)&lt;br /&gt;        {&lt;br /&gt;            currentSession = sessionFactory.OpenSession();&lt;br /&gt;            context.Items[CurrentSessionKey] = currentSession;&lt;br /&gt;        }&lt;br /&gt;        return currentSession;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static void CloseSession()&lt;br /&gt;    {&lt;br /&gt;        HttpContext context = HttpContext.Current;&lt;br /&gt;         ISession currentSession = context.Items[CurrentSessionKey] as ISession;&lt;br /&gt;&lt;br /&gt;         if (currentSession == null)&lt;br /&gt;         {&lt;br /&gt;             // No current session&lt;br /&gt;             return;&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;         currentSession.Close();&lt;br /&gt;         context.Items.Remove(CurrentSessionKey);&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     public static void CloseSessionFactory()&lt;br /&gt;     {&lt;br /&gt;         if (sessionFactory != null)&lt;br /&gt;         {&lt;br /&gt;             sessionFactory.Close();&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     public void Dispose() { }&lt;br /&gt;&lt;br /&gt;     public void Init(HttpApplication context)&lt;br /&gt;     {&lt;br /&gt;         context.BeginRequest += BeginRequest;&lt;br /&gt;         context.EndRequest += EndRequest;&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     private static void BeginRequest(object sender, EventArgs e)&lt;br /&gt;     {&lt;br /&gt;         ISession session = GetCurrentSession();&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     private static void EndRequest(object sender, EventArgs e)&lt;br /&gt;     {&lt;br /&gt;         CloseSession();&lt;br /&gt;     }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;Il est important de rajouter dans votre Web.config, a la section &lt;httpmodules&gt; la référence a notre classe IHttpModule comme ceci :&amp;nbsp;&lt;/httpmodules&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:xml"&gt;&lt;add name="NHSessionPerRequest" type="ContactManager.Models.NHSessionPerRequest"&gt;&lt;/add&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Ajout du repository&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Enfin pour&amp;nbsp;coordonner&amp;nbsp;le tout, il nous faut la&amp;nbsp;dernière&amp;nbsp;pièce&amp;nbsp;du puzzle qui permet de lier tout ce que nous avons fait. Pour cela, ajouter au dossier "models" une classe (qui herite de l'interface du tutoriel :&amp;nbsp;IContactManagerRepository), nommons la&amp;nbsp;NHContactManagerRepository.cs. Nous utiliserons Linq (avec NHibernate qui le permet depuis la version 2.1 de mémoire), n'oublier donc par les références (NHibernate.Linq.dll).&amp;nbsp;Implémenter&amp;nbsp;les méthodes de l'interface comme ceci :&lt;/div&gt;&lt;pre class="brush:c#"&gt;using NHibernate;&lt;br /&gt;using NHibernate.Linq;&lt;br /&gt;&lt;br /&gt;public class NHContactManagerRepository : IContactManagerRepository&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    // Utilisation SESSION (sessionfactory NH) == EntitieContext&lt;br /&gt;    public ISession Session&lt;br /&gt;    {&lt;br /&gt;        get { return NHSessionPerRequest.GetCurrentSession(); }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Contact GetContact(int id)&lt;br /&gt;    {            &lt;br /&gt;        var query = from c in Session.Linq&amp;lt; contact &amp;gt;()&lt;br /&gt;                    where c.Id == id&lt;br /&gt;                    select c;&lt;br /&gt;&lt;br /&gt;        return query.FirstOrDefault();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public IEnumerable&amp;lt; contact &amp;gt; ListContacts()&lt;br /&gt;    {&lt;br /&gt;        return Session.Linq&amp;lt; contact &amp;gt;().ToList();                        &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Contact CreateContact(Contact contactToCreate)&lt;br /&gt;    {&lt;br /&gt;        Session.Transaction.Begin();&lt;br /&gt;        Session.Save(contactToCreate);&lt;br /&gt;        Session.Transaction.Commit();&lt;br /&gt;        return contactToCreate;           &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Contact EditContact(Contact contactToEdit)&lt;br /&gt;    {            &lt;br /&gt;        Session.Transaction.Begin();&lt;br /&gt;        Session.Update(contactToEdit);&lt;br /&gt;        Session.Transaction.Commit();&lt;br /&gt;        return contactToEdit;            &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void DeleteContact(Contact contactToDelete)&lt;br /&gt;    {&lt;br /&gt;        Session.Transaction.Begin();&lt;br /&gt;        Session.Delete(contactToDelete);            &lt;br /&gt;        Session.Transaction.Commit();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Rien de&amp;nbsp;très&amp;nbsp;compliquer, j'ai repris les méthodes une a une qui était&amp;nbsp;créées&amp;nbsp;depuis la source du tutoriel, et je les aient modifiées en conséquence.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Configuration&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Avant de lancer notre application modifié il reste quelques petits détails a réaliser. Rajouter la chaine de connexion et&amp;nbsp;paramétrage&amp;nbsp;pour préciser que nous utiliserons NHibernate avec Oracle :&lt;/div&gt;&lt;div&gt;&lt;div&gt;Dans la section "configsections" &lt;/div&gt;&lt;div&gt;&lt;pre class="brush:xml"&gt;&lt;section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"&gt;&lt;br /&gt;&lt;/section&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;Et en fin de fichier (avant&amp;nbsp; )&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:xml"&gt;&lt;hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"&gt;    &lt;session-factory&gt;&lt;br /&gt;      &lt;br /&gt;      &lt;property name="connection.driver_class"&gt;NHibernate.Driver.OracleClientDriver&lt;/property&gt;&lt;br /&gt;      &lt;property name="connection.connection_string"&gt;User ID=admin;Password=123;Data Source=WEBLYO.world&lt;/property&gt;&lt;br /&gt;      &lt;property name="show_sql"&gt;true&lt;/property&gt;&lt;br /&gt;      &lt;property name="dialect"&gt;NHibernate.Dialect.Oracle10gDialect&lt;/property&gt;&lt;br /&gt;      &lt;property name="cache.use_query_cache"&gt;false&lt;/property&gt;&lt;br /&gt;      &lt;property name="adonet.batch_size"&gt;100&lt;/property&gt;&lt;br /&gt;      &lt;property name="proxyfactory.factory_class"&gt;NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle&lt;/property&gt;&lt;br /&gt;      &lt;mapping assembly="ContactManager"&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/mapping&gt;&lt;/session-factory&gt;&lt;br /&gt;  &lt;/hibernate-configuration&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Ajouter&amp;nbsp;également&amp;nbsp;la dll suivante qui est le proxy (cf web.config) :&amp;nbsp;NHibernate.ByteCode.Castle.dll&lt;/div&gt;&lt;div&gt;Tout les autres élements de la solution reste inchangés.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Conclusion&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="myblock"&gt;&lt;div style="text-align: justify;"&gt;La conclusion de cette migration est double. On remarque bien qu'il n'est pas si simple de changer de&amp;nbsp;modèle&amp;nbsp;de données, surtout entre Microsoft (Sql Server) et Orcale. Ceci étant due au fait, que Visual Studio en fait trop tout seul pour nous avec le drag'n drop ne facilitant pas la compréhension des choses. Avec NHibernate, tout les&amp;nbsp;éléments&amp;nbsp;doivent&amp;nbsp;être&amp;nbsp;compris pour pouvoir les coder correctement. Du mapping au codage de nos propre classes (POCO) ainsi que le contexte de l'application (Session/ISession vs.&amp;nbsp;ContactManagerDBEntities ...) Mais aussi, on remarque que toute la couche de validation et logique métier n'a pas bouger d'un poil !&amp;nbsp;Ça&amp;nbsp;c'est&amp;nbsp;plutôt&amp;nbsp;génial. La migration n'est pas aussi simple que celle de michel entre Entity Framework et Linq To Sql ... (on reste Microsoft...)&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-598118836433365555?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/598118836433365555/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/02/portage-du-tutoriel-contact-manager.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/598118836433365555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/598118836433365555'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/02/portage-du-tutoriel-contact-manager.html' title='Portage du tutoriel Contact Manager de Entity Framework à NHibernate (et Oracle)'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_2FEubNf04N4/S2biNF0blgI/AAAAAAAAAKs/kPPY4s0ssTU/s72-c/MappingNH.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-1501704793093796577</id><published>2010-01-25T06:13:00.000-08:00</published><updated>2010-01-25T06:21:10.621-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Exception Oracle 64 bits  / 32 Bits</title><content type='html'>Si vous etes sous un environnement 64bits comme moi et que vous developpez avec visual studio et avec Oracle il vous est peut etre déjà arrivé de voir cette erreur :&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;La tentative de chargement des bibliothèques du client Oracle a renvoyé BadImageFormatException. Ce problème se produit en mode 64 bits avec les composants du client Oracle 32 bits installés.&lt;br /&gt;&lt;/blockquote&gt;Tout simplement, c'est que le client Oracle installé sur votre machine n'est pas de type 64bits et donc de ce fait, l'application&amp;nbsp;s'exécutant&amp;nbsp;en 64bits pose souci !&lt;br /&gt;&lt;br /&gt;Pour y&amp;nbsp;remédier, tout simplement : Bouton droit &amp;gt;&amp;gt; Propriétés de votre Application, Onglet "Générer" et&amp;nbsp;choisissez&amp;nbsp;x86&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_2FEubNf04N4/S12myjiMA9I/AAAAAAAAAKk/LhgHwj9hWv4/s1600-h/WinConsole64bits.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_2FEubNf04N4/S12myjiMA9I/AAAAAAAAAKk/LhgHwj9hWv4/s320/WinConsole64bits.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-1501704793093796577?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/1501704793093796577/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/01/exception-oracle-64-bits-32-bits.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/1501704793093796577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/1501704793093796577'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/01/exception-oracle-64-bits-32-bits.html' title='Exception Oracle 64 bits  / 32 Bits'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2FEubNf04N4/S12myjiMA9I/AAAAAAAAAKk/LhgHwj9hWv4/s72-c/WinConsole64bits.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-2510970365951159311</id><published>2010-01-11T07:08:00.000-08:00</published><updated>2010-01-11T07:09:06.773-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='check'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='contrainte'/><title type='text'>Création d'un contrainte de type booleen Oracle (Check)</title><content type='html'>Bonjour,&lt;br /&gt;&lt;br /&gt;La petite astuce du jour, et de créer un champs "Booleen" dans Oracle. Or Oracle n'a pas ce type de champs possible lors de la création de table. Il n'existe que en PL/SQL.&lt;br /&gt;&lt;br /&gt;Cependant, il existe une méthode simple pour effectuer ce contrôle : UNE CONTRAINTE CHECK.&lt;br /&gt;&lt;br /&gt;En voici un exemple : &lt;br /&gt;&lt;pre class="brush:sql"&gt;ALTER TABLE SU.POSTS ADD (&lt;br /&gt;  CONSTRAINT BOOL_POSTISPUBLIC&lt;br /&gt; CHECK (ispublic=0 OR ispublic=1));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Tout simplement, on rajoute la contraint Check sur la tabel "POSTS" et sur le champs ISPUBLIC pour authoriser uniquement la valeur 0 ou 1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bonne journée&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-2510970365951159311?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/2510970365951159311/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/01/creation-dun-contrainte-de-type-booleen.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/2510970365951159311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/2510970365951159311'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/01/creation-dun-contrainte-de-type-booleen.html' title='Création d&apos;un contrainte de type booleen Oracle (Check)'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-5263055448834261143</id><published>2010-01-08T02:38:00.000-08:00</published><updated>2010-01-08T02:40:08.448-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='brushes'/><category scheme='http://www.blogger.com/atom/ns#' term='SyntaxHighlighter'/><title type='text'>Ajouter SyntaxHighlighter et les Brushes dans blogger</title><content type='html'>Pour rappel, &lt;br /&gt;&lt;br /&gt;Voici la méthode qui permet d'ajouter la colorisation syntaxique (SyntaxHighlighter) depuis votre blog google (blogger).&lt;br /&gt;&lt;br /&gt;1. Editer l'HTML de votre blog&lt;br /&gt;2. Faites éventuellement une sauvegarde&lt;br /&gt;3. Rajouter ces quelques lignes juste après le &amp;nbsp; pour activer la colorisation : &lt;br /&gt;&lt;pre class="brush:js"&gt;&lt;link href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" rel="stylesheet" type="text/css"&gt;&lt;/link&gt;&lt;br /&gt;&lt;link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" rel="stylesheet" type="text/css"&gt;&lt;/link&gt;&lt;br /&gt;&lt;script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;  SyntaxHighlighter.config.bloggerMode = true;&lt;br /&gt;  SyntaxHighlighter.all();&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;/pre&gt;4. Rajouter les brushes que vous souhaitez inclure a votre blog :&lt;br /&gt;&lt;pre class="brush:js"&gt;&lt;script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;La liste des brushes est disponible :  &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter:Brushes"&gt;http://alexgorbatchev.com/wiki/SyntaxHighlighter:Brushes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;b&gt;Attention ! Si vous changer de theme, penser a refaire cette manipulation pour ré-activer la colorisation !!!&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-5263055448834261143?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/5263055448834261143/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/01/ajouter-syntaxhighlighter-et-les.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/5263055448834261143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/5263055448834261143'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/01/ajouter-syntaxhighlighter-et-les.html' title='Ajouter SyntaxHighlighter et les Brushes dans blogger'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-2793821914640064511</id><published>2010-01-08T02:28:00.000-08:00</published><updated>2010-01-08T02:28:43.736-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IIS'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Ou est asp.net 3.5 sur IIS6 ?</title><content type='html'>&lt;a href="http://blogs.msdn.com/vijaysk/archive/2008/03/20/running-asp-net-3-5-on-iis.aspx"&gt;http://blogs.msdn.com/vijaysk/archive/2008/03/20/running-asp-net-3-5-on-iis.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-2793821914640064511?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/2793821914640064511/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/01/ou-est-aspnet-35-sur-iis6.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/2793821914640064511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/2793821914640064511'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/01/ou-est-aspnet-35-sur-iis6.html' title='Ou est asp.net 3.5 sur IIS6 ?'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-2387588208094574105</id><published>2010-01-08T02:07:00.000-08:00</published><updated>2010-02-01T07:18:52.956-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sequence'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='nhibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>NHibernate et les Séquences Oracle</title><content type='html'>Bonjour, voici un nouveau billet concernant l'utilisation de NHibernate avec Oracle et .Net.&lt;br /&gt;&lt;br /&gt;Le&amp;nbsp;problème&amp;nbsp;rencontré était l'utilisation d'un identifiant unique pour la création de données dans une table. Comme vous le savez peut etre déja, Oracle n'a pas de type "AUTO-INCREMENT"/"IDENTITE" comme Mysql ou SqlServeur. Pour pallier a cette contrainte il "suffit" de créer une SEQUENCE et d'utiliser cette derniere pour prendre de maniere unique l'identifiant de notre table.&lt;br /&gt;&lt;br /&gt;Le but de ce billet n'etant pas d'expliquer les Sequence, je vous laisse la lecture de ce site pour la compréhension :&amp;nbsp;&lt;a href="http://www.commentcamarche.net/contents/oracle/oracseq.php3"&gt;http://www.commentcamarche.net/contents/oracle/oracseq.php3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Revenons a nos mouton : &lt;i&gt;NHibernate est-il capable de&amp;nbsp;gérer&amp;nbsp;nativement les identifiants uniques ?&lt;/i&gt; C'est effectivement le cas ! Chouette ! Comment vous allez me dire ? C'est pas&amp;nbsp;très&amp;nbsp;compliqué, il suffit de modifier votre fichier de mapping comme ceci :&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&lt;class dynamic-update="true" name="Category" table="Categories"&gt;&lt;br /&gt;   &lt;cache usage="read-write"&gt;&lt;br /&gt;    &lt;id column="Id" name="Id" type="integer"&gt;&lt;br /&gt;      &lt;generator class="native"&gt;SEQ_CATEGORIES&lt;/generator&gt;      &lt;br /&gt;    &lt;/id&gt;&lt;br /&gt;    &lt;property length="100" name="Name"&gt;&lt;/property&gt;&lt;br /&gt;   &lt;/cache&gt;&lt;br /&gt;&lt;/class&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ci dessous le code de test de la création d'une catégorie &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;[TestMethod]&lt;br /&gt;[DeploymentItem("hibernate.cfg.xml")]&lt;br /&gt;public void CanCreateCategory()&lt;br /&gt;{&lt;br /&gt;  IRepository&lt;category&gt; repo = new CategoryRepository();&lt;br /&gt;  Category cat = new Category();            &lt;br /&gt;  cat.Name = "ASP.NET";&lt;br /&gt;&lt;br /&gt;  repo.Save(cat);&lt;br /&gt;};&lt;br /&gt;&lt;/category&gt;&lt;/pre&gt;&lt;br /&gt;L'avantage c'est que en Oracle, NHibernate utilisera la séquence SEQ_CATEGORIES pour alimenter la table en question &lt;br /&gt;&lt;pre class="brush:sql"&gt;SELECT SEQ_CATEGORIES.NEXTVAL FROM DUAL&lt;/pre&gt;&lt;br /&gt;Alors que si vous utiliser SQL Serveur, le parametre sera ignoré et le champs "Auto/Identité" sera utilisé.&lt;br /&gt;&lt;br /&gt;Cependant il me reste une question avec cette méthode, c'est une fois que l'on a "sauver" notre objet categorie en BDD ... est-ce possible d'obtenir cet identifiant généré ? pour faire d'autre traitement avec ? &lt;s&gt;Je pense que oui, mais pour l'instant je n'ai pas la réponse. Je vais chercher et je vous tiendrai au courant de mes résultats! &lt;/s&gt; Pour le coup c'est super evident et super simple : &lt;br /&gt;&lt;pre class="brush:c#"&gt;Console.WriteLine(" Avons nous l'objet avec l'id ?: " + cat.Id);&lt;br /&gt;&lt;/pre&gt;Bon codage !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-2387588208094574105?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/2387588208094574105/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/01/nhibernate-et-les-sequences-oracle.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/2387588208094574105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/2387588208094574105'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/01/nhibernate-et-les-sequences-oracle.html' title='NHibernate et les Séquences Oracle'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-5979472514581355395</id><published>2010-01-05T01:44:00.000-08:00</published><updated>2010-01-05T01:46:38.770-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debug'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Mot Clé [Conditional("DEBUG")] et #if DEBUG</title><content type='html'>Bonjour,&lt;br /&gt;&lt;br /&gt;Voici un nouvel article sur l'utilisation de certain mot clé que je viens de découvrir en C# par hazard.&lt;br /&gt;Il s'agit de &lt;b&gt;[Conditional("DEBUG")]&lt;/b&gt; et &lt;b&gt;#if DEBUG&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Ses deux mots clés permettent de "cacher" des méthodes ou des portions de code lors de la compilation en "RELEASE". En voici un exemple : &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;#if DEBUG&lt;br /&gt;MaMethode();&lt;br /&gt;#endif&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Dans cette exemple le code contenu entre le #if et #endif sera complètement supprimé en Release&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;[Conditional("DEBUG")]&lt;br /&gt;public static void MaMethode()&lt;br /&gt;{&lt;br /&gt;Console.WriteLine("Hello");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Dans cette exemple, l'appel sera de la main sera uniquement supprimé mais pas la fonction. Dans les 2 cas on arrive au meme résultat.&lt;br /&gt;&lt;br /&gt;Pour des soucis de sécurité on peut associer les 2 &lt;a href="http://www.dotnetguru2.org/amethyste/index.php/2006/12/10/la_difference_entre_if_debug_et_conditio"&gt;cf ce blog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cela peut être utile en travail d'equipe avec un controle de code source exclusif (SourceSafe).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-5979472514581355395?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/5979472514581355395/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2010/01/mot-cle-conditionaldebug-et-if-debug.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/5979472514581355395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/5979472514581355395'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2010/01/mot-cle-conditionaldebug-et-if-debug.html' title='Mot Clé [Conditional(&quot;DEBUG&quot;)] et #if DEBUG'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-6941277247223394979</id><published>2009-12-17T07:27:00.001-08:00</published><updated>2010-02-01T07:19:21.626-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='nhibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='intellisense'/><title type='text'>Intellisense Visual Studio 2008 et NHibernate</title><content type='html'>Bonjour,&lt;br /&gt;&lt;br /&gt;Pour les utilisateurs de &lt;a href="http://sourceforge.net/projects/nhibernate/files/NHibernate/"&gt;NHibernate &lt;/a&gt;(mapping Objet &amp;lt;-&amp;gt; Base de donnée), la création de fichier de configuration de "mapping" est obligatoire. Pour que cela soit beaucoup plus pratique et rapide voici comment rajouter l'intellisense de VS 2008 (et 2005 fonctionne aussi)&lt;br /&gt;&lt;br /&gt;1° Ajouter un fichier XML vide à votre solution&lt;br /&gt;&lt;br /&gt;2° Un nouveau menu apparait dans l'éditeur &amp;gt;&amp;gt; XML &amp;lt;&amp;lt; Cliquer sur Schémas...&lt;br /&gt;&amp;nbsp; &lt;a href="http://2.bp.blogspot.com/_2FEubNf04N4/SypO-XwQkuI/AAAAAAAAAKA/o5RHKGKDVhE/s1600-h/VSIntellisenseNhib1.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5416228335301726946" src="http://2.bp.blogspot.com/_2FEubNf04N4/SypO-XwQkuI/AAAAAAAAAKA/o5RHKGKDVhE/s200/VSIntellisenseNhib1.jpg" style="cursor: hand; cursor: pointer; height: 82px; width: 200px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3° Ajouter un nouveau "Schémas (XSD)" et sélectionner les 2 fichiers nhibernate-configuration.xsd et nhibernate-mapping.xsd depuis le dossier de NHibernate (C:\NHibernate\Required_Bins")&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_2FEubNf04N4/SypQ3sQsMFI/AAAAAAAAAKI/yX3TbjTiw3E/s1600-h/VSIntellisenseNhib2.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5416230419570634834" src="http://3.bp.blogspot.com/_2FEubNf04N4/SypQ3sQsMFI/AAAAAAAAAKI/yX3TbjTiw3E/s200/VSIntellisenseNhib2.jpg" style="cursor: hand; cursor: pointer; height: 150px; width: 200px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4° Changer la méthode d'utilisation en remplacant "Utiliser ce schéma" en &amp;gt;&amp;gt; "Automatique" (pour que les autres projets aient l'intellisense. &lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_2FEubNf04N4/SypQ38QT60I/AAAAAAAAAKQ/iCxyf2oKFAU/s1600-h/VSIntellisenseNhib3.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5416230423864011586" src="http://3.bp.blogspot.com/_2FEubNf04N4/SypQ38QT60I/AAAAAAAAAKQ/iCxyf2oKFAU/s200/VSIntellisenseNhib3.jpg" style="cursor: hand; cursor: pointer; height: 37px; width: 200px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;C'est tout ! C'est beau !&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_2FEubNf04N4/SypQ4LAycLI/AAAAAAAAAKY/7bqcqOcrfKs/s1600-h/VSIntellisenseNhib4.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5416230427825434802" src="http://3.bp.blogspot.com/_2FEubNf04N4/SypQ4LAycLI/AAAAAAAAAKY/7bqcqOcrfKs/s200/VSIntellisenseNhib4.jpg" style="cursor: hand; cursor: pointer; height: 200px; width: 190px;" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-6941277247223394979?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/6941277247223394979/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2009/12/intellisense-visual-studio-2008-et.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/6941277247223394979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/6941277247223394979'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2009/12/intellisense-visual-studio-2008-et.html' title='Intellisense Visual Studio 2008 et NHibernate'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2FEubNf04N4/SypO-XwQkuI/AAAAAAAAAKA/o5RHKGKDVhE/s72-c/VSIntellisenseNhib1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-2401964416018804139</id><published>2009-10-19T02:20:00.000-07:00</published><updated>2010-02-02T05:17:59.402-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='optimisation'/><category scheme='http://www.blogger.com/atom/ns#' term='cache'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Vider le cache Oracle</title><content type='html'>Voici quelques lignes de code pour effectuer le vidage du cache d'oracle.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Afin de permettre d'exécuter 2fois des requêtes sans que Oracle ne fasse sa propre gestion de cache du résultat. Faussant ainsi les délais d'exécution des requêtes suivantes.&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush:sql"&gt;alter system flush shared_pool;&lt;br /&gt;alter system flush buffer_cache;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Site tres utile pour Oracle : &lt;a href="http://www.aide-oracle.net/"&gt;http://www.aide-oracle.net/&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-2401964416018804139?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/2401964416018804139/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2009/10/vider-le-cache-oracle.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/2401964416018804139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/2401964416018804139'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2009/10/vider-le-cache-oracle.html' title='Vider le cache Oracle'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-7853621464352379518</id><published>2009-09-21T07:04:00.001-07:00</published><updated>2010-01-08T02:28:11.806-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='db2'/><category scheme='http://www.blogger.com/atom/ns#' term='as400'/><title type='text'>SQL et DB2 - Sequence, trigger ...</title><content type='html'>Quelques exemple de SQL sur DB2&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Création de table , sequence, trigger, unique, auto_increment ...&lt;/div&gt;&lt;div&gt;&lt;pre class="brush:sql"&gt;CREATE TABLE WIDGET_INVENT &lt;br /&gt;  ( ROW_ID INT NOT NULL GENERATED ALWAYS AS IDENTITY &lt;br /&gt;         (START WITH 1, INCREMENT BY 1, NO CACHE), &lt;br /&gt;    WIDGET_NO CHAR(6), &lt;br /&gt;    INV_COUNT INT WITH DEFAULT 0 &lt;br /&gt;  ); &lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.ibm.com/developerworks/data/library/techarticle/0205pilaka/0205pilaka2.html"&gt;Plus d'information sur le site d'IBM&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-7853621464352379518?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/7853621464352379518/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2009/09/sql-et-db2-sequence-trigger.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/7853621464352379518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/7853621464352379518'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2009/09/sql-et-db2-sequence-trigger.html' title='SQL et DB2 - Sequence, trigger ...'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-4325608819589581463</id><published>2009-07-06T07:58:00.000-07:00</published><updated>2010-01-05T01:55:56.793-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='extension'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Méthode d'extension ASP.NET</title><content type='html'>Les Méthodes d'extensions permettent d'ajouter "simplement" des méthodes a des objets. En voici un exemple : &lt;br /&gt;&lt;br /&gt;On rajoute a l'objet "IList" une methode &lt;b&gt;action&lt;/b&gt; (obligation d'etre static).&lt;br /&gt;On remarquera la syntax particuliere et l'utilisation du mot clé "this" en "parametre"&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;// IList&lt;br /&gt;public static void Action(this IList&lt;int&gt; list)&lt;br /&gt;{&lt;br /&gt;   //Faire une action ici&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;IList&lt;int&gt; list = new List&lt;int&gt;(); // doit etre du meme type&lt;br /&gt;list.Action();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Plus d'information : du 1.0 au 3.0&lt;br /&gt;&lt;a href="http://sebastiencourtois.wordpress.com/tag/methodes-dextension/"&gt;http://sebastiencourtois.wordpress.com/tag/methodes-dextension/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-4325608819589581463?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/4325608819589581463/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2009/07/methode-dextension-aspnet.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/4325608819589581463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/4325608819589581463'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2009/07/methode-dextension-aspnet.html' title='Méthode d&apos;extension ASP.NET'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-5731878690292966860</id><published>2009-06-24T08:40:00.001-07:00</published><updated>2010-01-05T01:57:35.807-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Tuto MVC .Net (nerddinner)</title><content type='html'>&lt;div&gt;&lt;br /&gt;Le MVC (modele vue controller) par l'exemple, le plus connu,&amp;nbsp;NERDDINNER :&lt;br /&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="http://nerddinnerbook.s3.amazonaws.com/Intro.htm"&gt;http://nerddinnerbook.s3.amazonaws.com/Intro.htm&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Apprendre le MVC sur le site www.asp.net (ainsi que les outils de développement) :&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="http://www.asp.net/learn/mvc/tutorial-21-cs.aspx"&gt;http://www.asp.net/learn/mvc/tutorial-21-cs.aspx&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-5731878690292966860?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/5731878690292966860/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2009/06/tuto-mvc-net-nerddinner.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/5731878690292966860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/5731878690292966860'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2009/06/tuto-mvc-net-nerddinner.html' title='Tuto MVC .Net (nerddinner)'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-210366430757604683.post-6007983296450467654</id><published>2009-06-24T08:30:00.001-07:00</published><updated>2010-02-01T07:20:09.984-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='sql serveur'/><category scheme='http://www.blogger.com/atom/ns#' term='commande'/><title type='text'>Commande et reconfiguration SQL Serveur (Express)</title><content type='html'>&lt;pre class="brush:shell"&gt;@ECHO OFF&lt;br /&gt;@ECHO =============================================&lt;br /&gt;@ECHO ::: Enabling User Instances&lt;br /&gt;@ECHO =============================================&lt;br /&gt;sqlcmd -S .\SQLExpress -Q "sp_configure 'user instances enabled' , 1;"&lt;br /&gt;@ECHO.&lt;br /&gt;@ECHO =============================================&lt;br /&gt;@ECHO ::: RECONFIGURING&lt;br /&gt;@ECHO =============================================&lt;br /&gt;sqlcmd -S .\SQLExpress -Q "reconfigure;"&lt;br /&gt;@ECHO DONE&lt;br /&gt;@ECHO.&lt;br /&gt;@ECHO =============================================&lt;br /&gt;@ECHO ::: COMPLETED&lt;br /&gt;@ECHO =============================================&lt;br /&gt;PAUSE&amp;gt;NUL&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Courier;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 11px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Courier;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 11px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Courier;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 11px;"&gt;&lt;div align="left" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; list-style-type: none; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;Explanation:&lt;/div&gt;&lt;div align="left" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; list-style-type: none; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;sqlcmd :: sql command prompt&lt;/div&gt;&lt;div align="left" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; list-style-type: none; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;-S :: server setting&lt;/div&gt;&lt;div align="left" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; list-style-type: none; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;.\SQLExpress  :: the sqlexpress server&lt;/div&gt;&lt;div align="left" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; list-style-type: none; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;-Q :: execute literal command and exit&lt;/div&gt;&lt;div align="left" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; list-style-type: none; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;"sp_configure 'user instances enabled' , 1;" :: the command to enable user instances&lt;/div&gt;&lt;div style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; list-style-type: none; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;"reconfigure;" :: reconfigure for new settings to become active&lt;/div&gt;&lt;div align="left" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; list-style-type: none; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;@ECHO :: some feedback won't do any harm&lt;/div&gt;&lt;div align="left" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; list-style-type: none; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;PAUSE&amp;gt;NUL :: PAUSE while passing (&amp;gt;) feedback to NUL output&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/210366430757604683-6007983296450467654?l=nerictech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerictech.blogspot.com/feeds/6007983296450467654/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://nerictech.blogspot.com/2009/06/commande-et-reconfiguration-sql-serveur.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/6007983296450467654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/210366430757604683/posts/default/6007983296450467654'/><link rel='alternate' type='text/html' href='http://nerictech.blogspot.com/2009/06/commande-et-reconfiguration-sql-serveur.html' title='Commande et reconfiguration SQL Serveur (Express)'/><author><name>Neric</name><uri>http://www.blogger.com/profile/10421113388893023050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_2FEubNf04N4/S2mdHVBtaeI/AAAAAAAAANY/UQHErHWEiWw/S220/arton348-450x359.jpg'/></author><thr:total>0</thr:total></entry></feed>
