<?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 &#187; Entity Framework 4.0</title>
	<atom:link href="https://blog.developpez.com/johangard/pcategory/visual-studio/visual-studio-2010/entity-framework-4-0/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>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>
	</channel>
</rss>
