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

<channel>
	<title>Technologies .NET et conseils de développement</title>
	<atom:link href="https://blog.developpez.com/johangard/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/johangard</link>
	<description></description>
	<lastBuildDate>Sun, 31 Jul 2011 16:53:20 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Création d&#8217;un modèle à partir d&#8217;une base de données</title>
		<link>https://blog.developpez.com/johangard/p10168/visual-studio/visual-studio-2010/entity-framework-4-0/creation_d_un_modele_a_partir_d_une_base</link>
		<comments>https://blog.developpez.com/johangard/p10168/visual-studio/visual-studio-2010/entity-framework-4-0/creation_d_un_modele_a_partir_d_une_base#comments</comments>
		<pubDate>Sun, 31 Jul 2011 16:53:20 +0000</pubDate>
		<dc:creator><![CDATA[jgard]]></dc:creator>
				<category><![CDATA[Entity Framework 4.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Entity Framework est l&#8217;ORM propose par Microsoft pour le .NET. Cette technologie est apparue avec le framework 3.5 SP1. Cette première version a laissé un goût de (beaucoup) trop peu. Il y avait de bonnes idées mais pour arriver à un résultat correct en termes de performance et de gestion d&#8217;états, il fallait souvent contourner le fonctionnement normal et aller redéfinir les basses couches du framework. Ceci impliquait un temps de développement accru alors que [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Entity Framework est l&rsquo;ORM propose par Microsoft pour le .NET. Cette technologie est apparue avec le framework 3.5 SP1. Cette première version a laissé un goût de (beaucoup) trop peu. Il y avait de bonnes idées mais pour arriver à un résultat correct en termes de performance et de gestion d&rsquo;états, il fallait souvent contourner le fonctionnement normal et aller redéfinir les basses couches du framework. Ceci impliquait un temps de développement accru alors que le but d&rsquo;un ORM est de réduire considérablement le temps passé sur la DAL. Mais rassurez-vous, la nouvelle mouture est arrivée avec beaucoup de corrections de bugs, des performances accrues et des facilités pour la gestion des entités. Nous verrons tout cela dans différents articles mais revenons d&rsquo;abord à ce qui nous intéresse : la création d&rsquo;un modèle à partie d&rsquo;une base de données.
</p>
<p>Le modèle est un fichier à ajouter à votre projet. Il possède une extension <em>edmx</em> et est lié à un fichier <em>cs</em> (ou <em>vb</em>) dans lequel est généré le code. Ajoutez donc ce type de fichier à votre projet en le choisissant dans la liste sous la catégorie <em>Data</em> (Figure 1).
</p>
<p><img src="http://johangard.files.wordpress.com/2011/07/072611_1905_introductio1.jpg" alt="" />
	</p>
<p><span style="color:#4f81bd;font-size:9pt;"><strong>Figure 1<br />
</strong></span></p>
<p>Un assistant se lance pour vous aider à paramétrer le modèle. Le premier écran vous propose de générer le modèle à partir d&rsquo;une base de données ou de créer un modèle vide (Figure 2). Nous choisirons ici la première option.
</p>
<p><img src="http://johangard.files.wordpress.com/2011/07/072611_1905_introductio2.jpg" alt="" />
	</p>
<p><span style="color:#4f81bd;font-size:9pt;"><strong>Figure 2<br />
</strong></span></p>
<p>Vient ensuite la configuration de la connexion à la base de données. Il s&rsquo;agit de l&rsquo;écran classique que l&rsquo;on rencontre lorsque l&rsquo;on configure une connexion (Figure 3). Vous devez donc sélectionner une connexion existante ou en créer une nouvelle en choisissant le serveur et la base de données. Cochez ou décochez la case permettant de conserver la connexion dans le fichier de configuration et cliquez sur le bouton <em>Next</em>.
</p>
<p><img src="http://johangard.files.wordpress.com/2011/07/072611_1905_introductio3.jpg" alt="" />
	</p>
<p><span style="color:#4f81bd;font-size:9pt;"><strong>Figure 3<br />
</strong></span></p>
<p>Nous arrivons déjà à la dernière étape. L&rsquo;écran vous affiche la liste des tables, vues et procédures stockées présentes dans la base de données choisie (Figure 4). Cochez les éléments que vous voulez inclure dans votre modèle Entity Framework. Deux autres options sont mises à disposition. La première vous permet de singulariser ou pluraliser les noms des entités et des tables de manière automatique. Qu&rsquo;est-ce que cela signifie ? Prenons un exemple. Si vous avez une table <em>People</em> dans la base de données, l&rsquo;EntitySet portera le nom <em>People</em> également. En revanche, le nom de la classe sera <em>Person</em>. On garde donc bien la logique de la programmation avec un nom singulier pour les classes et un nom pluriel pour les collections.
</p>
<p>La seconde option vous propose simplement d&rsquo;inclure les champs de clés étrangères dans votre modèle.
</p>
<p><img src="http://johangard.files.wordpress.com/2011/07/072611_1905_introductio4.jpg" alt="" />
	</p>
<p><span style="color:#4f81bd;font-size:9pt;"><strong>Figure 4<br />
</strong></span></p>
<p>Une fois que tout est configure, cliquez sur le bouton <em>Finish</em> et attendez que la génération soit terminée.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Création d&#8217;un Team Project</title>
		<link>https://blog.developpez.com/johangard/p10167/team-foundation-server-2010/creation_d_un_team_project</link>
		<comments>https://blog.developpez.com/johangard/p10167/team-foundation-server-2010/creation_d_un_team_project#comments</comments>
		<pubDate>Sun, 31 Jul 2011 16:52:27 +0000</pubDate>
		<dc:creator><![CDATA[jgard]]></dc:creator>
				<category><![CDATA[Team Foundation Server 2010]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Nous allons voir aujourd&#8217;hui comment créer un team project sous Team Foundation Server. Tout d&#8217;abord, il faut ouvrir le team explorer et vous connecter à la collection dans laquelle vous voulez créer un projet. Si vous ne savez pas comment faire, jetez un œil à mon article sur ce sujet : Connexion à Team Foundation Server Une fois connecté, cliquez droit sur la collection et sélectionnez New Team Project (Figure 1) Figure 1 L&#8217;assistant se [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Nous allons voir aujourd&rsquo;hui comment créer un team project sous Team Foundation Server.
</p>
<p>Tout d&rsquo;abord, il faut ouvrir le team explorer et vous connecter à la collection dans laquelle vous voulez créer un projet. Si vous ne savez pas comment faire, jetez un œil à mon article sur ce sujet : <a href="http://johangard.wordpress.com/2011/07/06/connexion-a-team-foundation-server/">Connexion à Team Foundation Server</a>
	</p>
<p>Une fois connecté, cliquez droit sur la collection et sélectionnez <em>New Team Project</em> (Figure 1)
</p>
<p><img src="http://johangard.files.wordpress.com/2011/07/071811_0900_crationdunt12.jpg" alt="" />
	</p>
<p><span style="color:#4f81bd;font-size:9pt;"><strong>Figure 1<br />
</strong></span></p>
<p>L&rsquo;assistant se lance afin de vous aider à configurer les bases du projet. Voyons ensemble les différentes étapes.
</p>
<p>La première étape vous demande un nom pour votre projet et une description de celui-ci (Figure 2). Je pense qu&rsquo;il n&rsquo;est pas nécessaire de donner plus de détail sur cette étape <span style="font-family:Wingdings;">J</span>
	</p>
<p><img src="http://johangard.files.wordpress.com/2011/07/071811_0900_crationdunt22.jpg" alt="" />
	</p>
<p><span style="color:#4f81bd;font-size:9pt;"><strong>Figure 2<br />
</strong></span></p>
<p>On vous propose ensuite de choisir un process template, c&rsquo;est-à-dire un modèle qui va définir la manière dont le projet doit s&rsquo;organiser et évoluer. Le choix du template aura une influence sur les répertoires et les requêtes disponibles au départ du projet pour les work items, le reporting, les builds. Par défaut, deux templates sont déjà disponibles, à savoir des templates pour les méthodes Agile et CMMI (Figure 3). Mais un lien vous permet de télécharger d&rsquo;autres templates si ceux-là ne vous conviennent pas. Il est également important de signaler que les templates sont en fait des fichiers xml et qu&rsquo;il est donc possible de les personnaliser à votre sauce ou encore de créer vos propres templates.
</p>
<p><img src="http://johangard.files.wordpress.com/2011/07/071811_0900_crationdunt31.jpg" alt="" />
	</p>
<p><span style="color:#4f81bd;font-size:9pt;"><strong>Figure 3<br />
</strong></span></p>
<p>Si la partie SharePoint de votre serveur TFS a été configurée, l&rsquo;étape suivante consiste à préciser si vous voulez créer un portail pour votre projet ou pas (Figure 4). Si vous décidez d&rsquo;en créer un, vous pouvez soit utiliser l&rsquo;adresse proposée par défaut, soit la modifier vous-même en cliquant sur le bouton <em>Configure</em>.
</p>
<p><img src="http://johangard.files.wordpress.com/2011/07/071811_0900_crationdunt41.jpg" alt="" />
	</p>
<p><span style="color:#4f81bd;font-size:9pt;"><strong>Figure 4<br />
</strong></span></p>
<p>La dernière étape configurable vous permet d&rsquo;éventuellement créer votre projet à partir d&rsquo;une branche existante dans votre source control (Figure 5). L&rsquo;option par défaut crée simplement un nouveau répertoire dans le source control.
</p>
<p><img src="http://johangard.files.wordpress.com/2011/07/071811_0900_crationdunt51.jpg" alt="" />
	</p>
<p><span style="color:#4f81bd;font-size:9pt;"><strong>Figure 5<br />
</strong></span></p>
<p>Vous accédez ensuite au récapitulatif de votre configuration (Figure 6). Cliquez sur le bouton <em>Finish</em>.
</p>
<p><img src="http://johangard.files.wordpress.com/2011/07/071811_0900_crationdunt61.jpg" alt="" />
	</p>
<p><span style="color:#4f81bd;font-size:9pt;"><strong>Figure 6<br />
</strong></span></p>
<p>Attendez ensuite gentiment que le statut arrive au bout (Figure 7).
</p>
<p><img src="http://johangard.files.wordpress.com/2011/07/071811_0900_crationdunt71.jpg" alt="" />
	</p>
<p><span style="color:#4f81bd;font-size:9pt;"><strong>Figure 7<br />
</strong></span></p>
<p>Vous arrivez enfin à la dernière étape confirmant la création de votre projet (Figure 8). Cliquez sur le bouton <em>Close</em> et le tour est joué.
</p>
<p><img src="http://johangard.files.wordpress.com/2011/07/071811_0900_crationdunt81.jpg" alt="" />
	</p>
<p><span style="color:#4f81bd;font-size:9pt;"><strong>Figure 8</strong></span></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les membres partiels</title>
		<link>https://blog.developpez.com/johangard/p10166/developpement/le-langage-c/les_membres_partiels</link>
		<comments>https://blog.developpez.com/johangard/p10166/developpement/le-langage-c/les_membres_partiels#comments</comments>
		<pubDate>Sun, 31 Jul 2011 16:51:05 +0000</pubDate>
		<dc:creator><![CDATA[jgard]]></dc:creator>
				<category><![CDATA[Le langage C#]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Les membres partiels sont apparus très tôt avec le C# 2.0. Ils permettent de répartir le code d&#8217;une classe ou d&#8217;une méthode sur plusieurs fichiers. Les classes partielles sont très utiles lorsque l&#8217;on veut répartir les méthodes d&#8217;une classe entre plusieurs développeurs, tout en évitant les risques engendrés par un merge lors d&#8217;un multiple check-out. La classe est donc divisée en plusieurs fichiers, chaque développeur ayant le sien. Imaginons par exemple une classe de requête [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Les membres partiels sont apparus très tôt avec le C# 2.0. Ils permettent de répartir le code d&rsquo;une classe ou d&rsquo;une méthode sur plusieurs fichiers.
</p>
<p>Les classes partielles sont très utiles lorsque l&rsquo;on veut répartir les méthodes d&rsquo;une classe entre plusieurs développeurs, tout en évitant les risques engendrés par un merge lors d&rsquo;un multiple check-out. La classe est donc divisée en plusieurs fichiers, chaque développeur ayant le sien. Imaginons par exemple une classe de requête dans laquelle nous séparons les selects, les inserts, les updates et les deletes. Nous voilons donc avec quatre fichiers mais une seule classe. Les classes partielles peuvent également être utilisées pour étendre une classe créée par un générateur de code, plutôt que de devoir hériter de celle-ci. Mais comment déclarer une classe partielle ? Pour cela, rien de plus simple : il suffit d&rsquo;ajouter le mot clé <em>partial</em> dans la déclaration de la classe (Figure 1). Cette déclaration devra se retrouver dans chaque fichier qui fait partie de cette classe partielle.
</p>
<p><img src="http://johangard.files.wordpress.com/2011/07/073111_1545_lesmembresp1.jpg" alt="" />
	</p>
<p><span style="color:#4f81bd;font-size:9pt;"><strong>Figure 1<br />
</strong></span></p>
<p>Quant aux méthodes partielles, il est évident qu&rsquo;il n&rsquo;est pas envisageable de répartir leur implémentation à différents endroits. Une méthode partielle consiste à séparer sa déclaration de son implémentation, un peu comme quand on utilise une interface. L&rsquo;utilité se réduit donc en grande partie aux méthodes créées par les générateurs de code. Ceux-ci déclarent la méthode (Figure 2) et les développeurs se chargent de l&rsquo;implémenter (Figure 3).
</p>
<p><img src="http://johangard.files.wordpress.com/2011/07/073111_1545_lesmembresp2.jpg" alt="" />
	</p>
<p><span style="color:#4f81bd;font-size:9pt;"><strong>Figure 2<br />
</strong></span></p>
<p><img src="http://johangard.files.wordpress.com/2011/07/073111_1545_lesmembresp3.jpg" alt="" />
	</p>
<p><span style="color:#4f81bd;font-size:9pt;"><strong>Figure 3<br />
</strong></span></p>
<p>Contrairement aux classes, les méthodes statiques sont soumises à certaines contraintes :
</p>
<ul>
<li>Elles ne peuvent pas renvoyer de résultat
</li>
<li>Elles ne peuvent pas contenir de paramètre <em>out</em>
		</li>
<li>Elles doivent être privées</li>
</ul>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Descriptif des règles pour les champs de work item</title>
		<link>https://blog.developpez.com/johangard/p10123/architecture/descriptif_des_regles_pour_les_champs_de</link>
		<comments>https://blog.developpez.com/johangard/p10123/architecture/descriptif_des_regles_pour_les_champs_de#comments</comments>
		<pubDate>Tue, 12 Jul 2011 10:34:43 +0000</pubDate>
		<dc:creator><![CDATA[jgard]]></dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Team Foundation Server 2010]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Lorsque vous modifiez un type de work item, vous avez la possibilité d&#8217;appliquer des règles à chacun des champs présents. Bien que le nom de la plupart des règles soit assez parlant, il reste assez mystérieux pour d&#8217;autres. Voici donc un petit descriptif de chacune des règles disponibles : ALLOWEDVALUES : spécifie une liste de valeurs possibles pour le champ. ALLOWEXISTINGVALUE : indique que la valeur actuelle est autorisée. CANNOTLOSEVALUE : une fois que le [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Lorsque vous modifiez un type de work item, vous avez la possibilité d&rsquo;appliquer des règles à chacun des champs présents. Bien que le nom de la plupart des règles soit assez parlant, il reste assez mystérieux pour d&rsquo;autres. Voici donc un petit descriptif de chacune des règles disponibles :
</p>
<ul>
<li>ALLOWEDVALUES : spécifie une liste de valeurs possibles pour le champ.
</li>
<li>ALLOWEXISTINGVALUE : indique que la valeur actuelle est autorisée.
</li>
<li>CANNOTLOSEVALUE : une fois que le champ reçoit une valeur, il ne peut plus être vidé.
</li>
<li>COPY : copie une valeur à partie d&rsquo;un autre champ ou d&rsquo;une valeur système.
</li>
<li>DEFAULT : indique une valeur par défaut à placer dans le champ.
</li>
<li>EMPTY : le champ est vidé et grisé.
</li>
<li>FROZEN : rend le champ non modifiable dès qu&rsquo;on lui donne une valeur non nulle.
</li>
<li>MATCH : indique un format que la valeur doit respecter. Cette règle s&rsquo;applique uniquement aux champs de type <em>string</em>. Les lettres <em>A, N, X</em> sont interprétées respectivement pour des caractères alphabétiques, numériques et alphanumériques. Tous les autres caractères sont traités comme de simples littéraux.
</li>
<li>NOTSAMEAS : indique que la valeur doit être différente de celle d&rsquo;un autre champ.
</li>
<li>PROHIBITEDVALUES : spécifie une liste de valeurs interdites pour le champ.
</li>
<li>READONLY : le champ n&rsquo;est pas modifiable et est grisé.
</li>
<li>REQUIRED : le champ est obligatoire.
</li>
<li>SERVERDEFAULT : remplit le champ avec la valeur donnée par le serveur au moment de la sauvegarde. Le champ apparaît en lecture seule.
</li>
<li>SUGGESTEDVALUES : spécifie une liste de valeurs recommandées mais sans interdire l&rsquo;encodage d&rsquo;autres valeurs.
</li>
<li>VALIDUSER : la valeur doit correspondre à un utilisateur valide.
</li>
<li>WHEN : spécifie une liste de règles à appliquer lorsqu&rsquo;un champ possède la valeur indiquée
</li>
<li>WHENNOT : spécifie une liste de règles à appliquer lorsqu&rsquo;un champ possède une valeur différente de la valeur indiquée.
</li>
<li>WHENCHANGED : spécifie une liste de règles à appliquer lorsqu&rsquo;un champ change de valeur.
</li>
<li>WHENNOTCHANGED : spécifie une liste de règles à appliquer lorsqu&rsquo;un champ ne change pas de valeur.
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Connect to a Team Foundation Server</title>
		<link>https://blog.developpez.com/johangard/p9753/team-foundation-server-2010/connect_to_a_team_foundation_server</link>
		<comments>https://blog.developpez.com/johangard/p9753/team-foundation-server-2010/connect_to_a_team_foundation_server#comments</comments>
		<pubDate>Sun, 13 Feb 2011 18:06:12 +0000</pubDate>
		<dc:creator><![CDATA[jgard]]></dc:creator>
				<category><![CDATA[Team Foundation Server 2010]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Before any advanced action, you first need to connect Visual Studio to a Team Foundation Server. So go to the Team menu and select Connect to Team Foundation Server as indicated in Figure 1. A first window opens up asking you to select a Team Foundation Server (Figure 2). If no server was configured before, then you will have to configure one by clicking the Servers button in the top right corner of the window. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Before any advanced action, you first need to connect Visual Studio to a Team Foundation Server. So go to the <em>Team</em> menu and select <em>Connect to Team Foundation Server</em> as indicated in Figure 1.</p>
<p><img src="http://blog.developpez.com/media/01 - Menu.jpg" width="453" height="69" alt="Figure 1 - Connect to Team Foundation Server Menu" /></p>
<p>A first window opens up asking you to select a Team Foundation Server (Figure 2). If no server was configured before, then you will have to configure one by clicking the <em>Servers</em> button in the top right corner of the window. Otherwise you just have to choose the server from the list and check the collection and projects you want to connect to.</p>
<p><img src="http://blog.developpez.com/media/02 - Connect to Team Project.jpg" width="638" height="396" alt="Figure 2 - Connect to Team Project" /></p>
<p>A second window opens up listing all configured Team Foundation Servers with their names and addresses (Figure 3). To configure a new server, click the <em>Add</em> button in the top right corner of the window.</p>
<p><img src="http://blog.developpez.com/media/03 - Add-Remove Server.jpg" width="652" height="413" alt="Figure 3 - Add/Remove Team Foundation Server" /></p>
<p>Here comes the configuration window that will allow you to find your Team Foundation Server. As you can see in Figure 4, different parameters are available to find it. You can either enter the full URL or specify all parameters separately, that is the name, path, port number and protocol. When you are done, click the <em>OK</em> button. If the server cannot be found, then an error message will be displayed.</p>
<p><img src="http://blog.developpez.com/media/04 - Add Server.jpg" width="462" height="294" alt="Figure 4 - Add Team Foundation Server" /></p>
<p>You now see that the newly configured server mapping has been added to the list of the previous window (Figure 5). Select it if it is not done yet and click the <em>Close</em> button.</p>
<p><img src="http://blog.developpez.com/media/05 - Added Server.jpg" width="653" height="416" alt="Figure 5 - Select Server" /></p>
<p>You are now one step away from the end of the process. The server you have just configured now appears in the list. Once you select it, you will see the list of all Team Project Collections present on the server along with all their associated Team Projects (Figure 6). All you have to do is to select the collection you want to work on and, if you want to work with existing projects, you might want to select them too. When you are ready, click the Connect button. Congratulations! Your Visual Studio is now connected to a Team Foundation Server.</p>
<p><img src="http://blog.developpez.com/media/06 - Select Collection.jpg" width="639" height="397" alt="Figure 6 - Select Team Project Collection" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Import d&#8217;une procédure stockée</title>
		<link>https://blog.developpez.com/johangard/p9341/visual-studio/visual-studio-2010/entity-framework-4-0/import_d_une_procedure_stockee</link>
		<comments>https://blog.developpez.com/johangard/p9341/visual-studio/visual-studio-2010/entity-framework-4-0/import_d_une_procedure_stockee#comments</comments>
		<pubDate>Sat, 02 Oct 2010 13:36:35 +0000</pubDate>
		<dc:creator><![CDATA[jgard]]></dc:creator>
				<category><![CDATA[Entity Framework 4.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[En plus de l&#8217;import de tables, Entity Framework vous permet bien entendu d&#8217;importer des procédures stockées. Voici comment faire : &#8211; Tout d&#8217;abord, veillez à sélectionner les procédures que vous voulez importer lorsque vous créez ou mettez à jour votre modèle à partir de la base de données : &#8211; Une fois les procédures dans le SSDL, il suffit de les importer dans le CSDL. Pour cela, on peut passer directement par le designer : [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>En plus de l&rsquo;import de tables, Entity Framework vous permet bien entendu d&rsquo;importer des procédures stockées.<br />
Voici comment faire :</p>
<p>&#8211; Tout d&rsquo;abord, veillez à sélectionner les procédures que vous voulez importer lorsque vous créez ou mettez à jour votre modèle à partir de la base de données :</p>
<p><img src="http://blog.developpez.com/media/Database Objects.jpg" width="625" height="556" alt="" /></p>
<p>&#8211; Une fois les procédures dans le SSDL, il suffit de les importer dans le CSDL. Pour cela, on peut passer directement par le designer :</p>
<p><img src="http://blog.developpez.com/media/Add Function Import.jpg" width="515" height="122" alt="Add Function Import" /></p>
<p><img src="http://blog.developpez.com/media/Add Function Import Box.jpg" width="520" height="620" alt="Add Function Import Dialog Box" /></p>
<p>&#8211; Vous pouvez vérifier dans le Model Browser que votre fonction a bien été créée :</p>
<p><img src="http://blog.developpez.com/media/Function Import Model Browser.jpg" width="272" height="295" alt="Model Browser" /></p>
<p>Et le tour est joué. Il ne vous reste plus qu&rsquo;à appeler cette fonction directement à partir de votre contexte pour en obtenir le résultat.</p>
<p>Petite remarque cependant, les Complex Types ne sont pas supportés dans le mapping de fonctions.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Création de Complex Types en mode Design</title>
		<link>https://blog.developpez.com/johangard/p8907/visual-studio/visual-studio-2010/entity-framework-4-0/creation_de_complex_types_en_mode_design</link>
		<comments>https://blog.developpez.com/johangard/p8907/visual-studio/visual-studio-2010/entity-framework-4-0/creation_de_complex_types_en_mode_design#comments</comments>
		<pubDate>Thu, 02 Sep 2010 08:50:56 +0000</pubDate>
		<dc:creator><![CDATA[jgard]]></dc:creator>
				<category><![CDATA[Entity Framework 4.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Un Complex Type est une propriété non scalaire d&#8217;une entité qui peut contenir elle-même des propriétés scalaires ou d&#8217;autres Complex Types. Par exemple, l&#8217;entité suivante : On peut considérer que les champs Firstname et Lastname sont très liés et pourraient être regroupés dans un champ Name. C&#8217;est ce que l&#8217;on appelle un Complex Type. Autrefois, la création de Complex Types n&#8217;était pas supportée par l&#8217;Entity Model Designer, nous obligeant donc à passer par le mode [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Un Complex Type est une propriété non scalaire d&rsquo;une entité qui peut contenir elle-même des propriétés scalaires ou d&rsquo;autres Complex Types.<br />
Par exemple, l&rsquo;entité suivante : </p>
<p><img src="http://blog.developpez.com/media/EF Complex Type Step 1.jpg" width="158" height="185" alt="EF Complex Type Entity" /></p>
<p>On peut considérer que les champs Firstname et Lastname sont très liés et pourraient être regroupés dans un champ Name. C&rsquo;est ce que l&rsquo;on appelle un Complex Type.</p>
<p>Autrefois, la création de Complex Types n&rsquo;était pas supportée par l&rsquo;Entity Model Designer, nous obligeant donc à passer par le mode XML dans lequel il est parfois difficile de s&rsquo;y retrouver. Le problème est maintenant réglé avec la version 4.0.<br />
Voyons tout de suite comment procéder en reprenant notre exemple :</p>
<p>Avant tout, il faut sélectionner les différents champs de l&rsquo;entité qui formeront le Complex Type. Dans notre cas, il s&rsquo;agit de Firstname et Lastname. Ensuite, dans le menu contextuel, nous pouvons trouver la nouvelle action permettant de regrouper nos champs :</p>
<p> <img src="http://blog.developpez.com/media/EF Complex Type Step 2.jpg" width="443" height="374" alt="" /></p>
<p>Il ne reste plus qu&rsquo;à renommer le Complex Type et le tour est joué. Le nouveau champ apparaît dans le Model Browser et les deux propriétés scalaires sont bien remplacées par le Complex Type dans l&rsquo;entité : </p>
<p><img src="http://blog.developpez.com/media/EF Complex Type Step 3.jpg" width="577" height="273" alt="" /></p>
<p>Le mapping est également impacté comme on peut le voir ici : </p>
<p><img src="http://blog.developpez.com/media/EF Complex Type Step 4 - Mapping.jpg" width="517" height="269" alt="Complex Type Mapping" /></p>
<p>Le Complex Type devient en fait une classe contenant nos deux propriétés d&rsquo;origine. Lorsque l&rsquo;on créera une nouvelle entité Person, il sera donc nécessaire de créer une instance de cette classe si l&rsquo;on veut accéder aux valeurs des champs.<br />
Pour terminer, voyons comment utiliser cette nouvelle propriété.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Person person = new Person(); <br />
person.Name = new Name(); <br />
person.Name.Firstname = &quot;John&quot;; <br />
person.Name.Lastname = &quot;Doe&quot;;</div></div>
<p>A savoir qu&rsquo;il est tout à fait possible de donner des noms différents à la classe et à la propriété.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gestion des clés étrangères</title>
		<link>https://blog.developpez.com/johangard/p8914/visual-studio/visual-studio-2010/entity-framework-4-0/gestion_des_cles_etrangeres</link>
		<comments>https://blog.developpez.com/johangard/p8914/visual-studio/visual-studio-2010/entity-framework-4-0/gestion_des_cles_etrangeres#comments</comments>
		<pubDate>Thu, 02 Sep 2010 08:50:26 +0000</pubDate>
		<dc:creator><![CDATA[jgard]]></dc:creator>
				<category><![CDATA[Entity Framework 4.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[La gestion des clés étrangères posait de gros problèmes dans la version précédente. Il était en effet impossible d&#8217;avoir une relation entre deux entités tout en gardant la clé étrangère dans les propriétés, la raison étant que le champ était mappé à la fois comme clé de la relation et comme propriété de l&#8217;entité. Il fallait donc faire un choix. Fort heureusement, ce problème n&#8217;existe plus dans la version 4.0, les deux mappings peuvent donc [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>La gestion des clés étrangères posait de gros problèmes dans la version précédente. Il était en effet impossible d&rsquo;avoir une relation entre deux entités tout en gardant la clé étrangère dans les propriétés, la raison étant que le champ était mappé à la fois comme clé de la relation et comme propriété de l&rsquo;entité. Il fallait donc faire un choix.<br />
Fort heureusement, ce problème n&rsquo;existe plus dans la version 4.0, les deux mappings peuvent donc cohabiter dans notre modèle.<br />
Pour cela, il suffit de cocher une simple case lors de la création de la relation :</p>
<p><img src="http://blog.developpez.com/media/Add Association Dialog Box.JPG" width="501" height="558" alt="Figure 1" /></p>
<p>Si cette case n&rsquo;a pas été cochée lors de la création de l&rsquo;association, il est malgré tout toujours possible de marquer une propriété comme étant une clé étrangère. Pour cela, il suffit de double-cliquer sur l&rsquo;association en mode design, ce qui fait apparaître la fenêtre suivante : </p>
<p><img src="http://blog.developpez.com/media/Referential Constraint.jpg" width="533" height="304" alt="" /></p>
<p>Il ne vous reste plus qu&rsquo;à spécifier les tables et propriétés qui entrent en jeu dans cette relation.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plus de PDB à la compilation : comment faire ?</title>
		<link>https://blog.developpez.com/johangard/p8922/visual-studio/plus_de_pdb_a_la_compilation_comment_fai</link>
		<comments>https://blog.developpez.com/johangard/p8922/visual-studio/plus_de_pdb_a_la_compilation_comment_fai#comments</comments>
		<pubDate>Thu, 02 Sep 2010 08:49:56 +0000</pubDate>
		<dc:creator><![CDATA[jgard]]></dc:creator>
				<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Lors de la compilation d&#8217;un projet Visual Studio, un fichier est généré en plus de l&#8217;assembly. Il porte le même nom mais possède une extension différente : PDB pour &#171;&#160;Program Database&#160;&#187;. Ce fichier contient toutes les informations de debug et d&#8217;état du projet. Cela permet entre autre de pouvoir s&#8217;arrêter sur un breakpoint lors de tests. Si ces fichiers sont nécessaires en phase de développement, ils sont cependant inutiles en cas de release du projet. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Lors de la compilation d&rsquo;un projet Visual Studio, un fichier est généré en plus de l&rsquo;assembly. Il porte le même nom mais possède une extension différente : PDB pour &laquo;&nbsp;Program Database&nbsp;&raquo;. Ce fichier contient toutes les informations de debug et d&rsquo;état du projet. Cela permet entre autre de pouvoir s&rsquo;arrêter sur un breakpoint lors de tests. Si ces fichiers sont nécessaires en phase de développement, ils sont cependant inutiles en cas de release du projet. Il est donc utile de savoir comment empêcher la génération de ces fichiers.</p>
<p>Rendez-vous pour cela dans les propriétés de votre projet dans l&rsquo;onglet &laquo;&nbsp;Build&nbsp;&raquo;. Tout en bas, la section &laquo;&nbsp;Output&nbsp;&raquo; contient un bouton &laquo;&nbsp;Advanced&nbsp;&raquo;.</p>
<p><img src="http://blog.developpez.com/media/Project properties output.jpg" width="624" height="207" alt="" /></p>
<p>Cliquez dessus pour ouvrir une nouvelle popup. Le paramètre qui nous intéresse est &laquo;&nbsp;Debug Info&nbsp;&raquo;. Celui-ci possède 3 options : none, pdb-only et full. </p>
<p><img src="http://blog.developpez.com/media/Project Advanced Build Settings.jpg" width="475" height="355" alt="" /></p>
<p>Choisissez &laquo;&nbsp;none&nbsp;&raquo; et sauvegardez vos modifications. Vous voilà débarrassé des fichiers PDB !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilisation d&#8217;un switch avec une action identique pour plusieurs valeurs</title>
		<link>https://blog.developpez.com/johangard/p9252/developpement/utilisation_d_un_switch_avec_une_action_</link>
		<comments>https://blog.developpez.com/johangard/p9252/developpement/utilisation_d_un_switch_avec_une_action_#comments</comments>
		<pubDate>Thu, 02 Sep 2010 08:48:46 +0000</pubDate>
		<dc:creator><![CDATA[jgard]]></dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Le langage C#]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Il arrive parfois que vous vouliez utiliser un switch dans lequel plusieurs valeurs vont effectuer les mêmes actions. Pour cela, il n&#8217;est pas nécessaire de répéter le code pour chaque valeur. Il suffit simplement d&#8217;utiliser la syntaxe suivante : switch (myValue) { &#160; &#160; case myFirstCaseValue: &#160; &#160; case mySecondCaseValue: &#160; &#160; &#160; &#160; Action(); &#160; &#160; &#160; &#160; break; &#160; &#160; case myThirdAction: &#160; &#160; &#160; &#160; OtherAction(); &#160; &#160; &#160; &#160; break; &#160; [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Il arrive parfois que vous vouliez utiliser un switch dans lequel plusieurs valeurs vont effectuer les mêmes actions. Pour cela, il n&rsquo;est pas nécessaire de répéter le code pour chaque valeur. Il suffit simplement d&rsquo;utiliser la syntaxe suivante :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">switch (myValue) <br />
{ <br />
&nbsp; &nbsp; case myFirstCaseValue: <br />
&nbsp; &nbsp; case mySecondCaseValue: <br />
&nbsp; &nbsp; &nbsp; &nbsp; Action(); <br />
&nbsp; &nbsp; &nbsp; &nbsp; break; <br />
&nbsp; &nbsp; case myThirdAction: <br />
&nbsp; &nbsp; &nbsp; &nbsp; OtherAction(); <br />
&nbsp; &nbsp; &nbsp; &nbsp; break; <br />
&nbsp; &nbsp; default: <br />
&nbsp; &nbsp; &nbsp; &nbsp; break; <br />
}</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
