<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SergioTarrillo - RichWeblog : Entity Framework, Code Snippets</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/tags/Entity+Framework/Code+Snippets/default.aspx</link><description>Etiquetas: Entity Framework, Code Snippets</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Recuperando una cadena de conexion SqlConnectionString desde una cadena EntityConnectionString</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2009/12/13/162471.aspx</link><pubDate>Sun, 13 Dec 2009 17:19:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:162471</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=162471</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2009/12/13/162471.aspx#comments</comments><description>&lt;p&gt;Desde hace algunos proyectos, en lugar de usar frameworks o librer&amp;iacute;as de acceso a datos para un escenario Ado.Net y SQL Server, prefiero usar Ado.Net Entity Framework. Partiendo de las premisas que se cuenta con Visual Studio 2008, son proyectos nuevos, y claro, siempre y cuando pueda intervenir en decidir la arquitectura de la aplicaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Si estamos empezando a usar una nueva tecnolog&amp;iacute;a, tomemos como referencia el acceso a datos que siempre podemos usar frameworks, apis, generadores de c&amp;oacute;digo, o un ORM, como dec&amp;iacute;a si, estamos empezando a usar una nueva tecnolog&amp;iacute;a para el acceso a datos, no debemos ser estrictos en el uso, sobre todo si no tenemos la experiencia necesario o no tenemos informaci&amp;oacute;n disponible, bajo la premisa que no podemos retrasar los tiempos del proyecto. Si en un proyecto estoy usando Ado.Net EF o NHibernate, y tengo problemas para traducir alguna consulta, no debemos obsesionarnos en hacerlo con la tecnolog&amp;iacute;a usada, si en un par de d&amp;iacute;as no encontramos alguna soluci&amp;oacute;n, podemos hacer ese m&amp;eacute;todo o consulta compleja con ado.net puro (SqlConnection, etc). Es una opini&amp;oacute;n personal, y bajo la premisa que &lt;b&gt;no podemos retrasar los tiempos del proyecto&lt;/b&gt; por intentar ser puristas y estrictos en el uso de algunas tecnolog&amp;iacute;as. Ojo, esto tampoco quiere decir vayamos hacer una mezcolanza &lt;span style="text-decoration:line-through;"&gt;una mazamorra&lt;/span&gt; con nuestros proyectos y c&amp;oacute;digo, siempre debemos mantener la legibilidad.&lt;/p&gt;
&lt;p&gt;Dejemos el rollo, y vayamos al tema del post:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Necesitamos crear una conexi&amp;oacute;n SlqConnection en un proyecto que esta usando Ado.Net Entity Framework,&lt;/b&gt; pero no deseamos agregar una nueva cadena de conexi&amp;oacute;n al archivo de configuraci&amp;oacute;n para la misma base de datos. &lt;/p&gt;
&lt;p&gt;Una cadena de conexi&amp;oacute;n para EntityClient (&lt;a title="EntityConnection class" href="http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.aspx" target="_blank"&gt;EntityConnection&lt;/a&gt;) es as&amp;iacute;:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;add&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;AdventureWorksEntities&amp;quot;&lt;/span&gt; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;connectionString&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;metadata=.\AdventureWorks.csdl|.\AdventureWorks.ssdl|.\AdventureWorks.msl;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;      provider=System.Data.SqlClient;provider connection string=&amp;#39;Data Source=localhost;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;      Initial Catalog=AdventureWorks;Integrated Security=True;multipleactiveresultsets=true&amp;#39;&amp;quot; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;providerName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;System.Data.EntityClient&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Pero una conexi&amp;oacute;n para SqlClient (&lt;a title="SqlConnection class" href="http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.aspx" target="_blank"&gt;SqlConnection&lt;/a&gt;) puede tener la siguiente estructura:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;add&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;AdventureWorksSql&amp;quot;&lt;/span&gt; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;connectionString&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Data Source=localhost;Initial Catalog=AdventureWorks;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;      Integrated Security=True;&amp;quot; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;       &lt;span style="color:#ff0000;"&gt;providerName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;System.Data.SqlClient&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Con el siguiente c&amp;oacute;digo, podemos recuperar una cadena de conexi&amp;oacute;n SqlClient, desde una cadena de conexi&amp;oacute;n EntityClient:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; EntityConnectionStringBuilder entCn = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; EntityConnectionStringBuilder(&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;     ConfigurationManager.ConnectionStrings[&lt;span style="color:#006080;"&gt;&amp;quot;AdventureWorksEntities&amp;quot;&lt;/span&gt;].ConnectionString);&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; SqlConnectionString = &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;       entCn.ProviderConnectionString.Replace(&lt;span style="color:#006080;"&gt;&amp;quot;MultipleActiveResultSets=True&amp;quot;&lt;/span&gt;,&lt;span style="color:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Y con este c&amp;oacute;digo evitamos la necesidad de tener dos cadenas de conexi&amp;oacute;n, que apuntan a la misma base de datos pero con distinto proveedor. Evidentemente que hay un costo de operaci&amp;oacute;n al recuperar el valor de la otra de conexi&amp;oacute;n, porque internamente debe estar haciendo un split o algo parecido. El uso depender&amp;aacute; del escenario, y podemos encontrar algunas variantes bajo la misma idea, como por ejemplo partir de una cadena SqlClient y convertirla en una cadena EntityClient. Pero ah&amp;iacute; esta el c&amp;oacute;digo.&lt;/p&gt;
&lt;p&gt;Nota: &lt;span style="text-decoration:underline;"&gt;Sobre remover el atributo MultipleActiveResultSets&lt;/span&gt;, cuando creamos una cadena de conexi&amp;oacute;n Sql y no indicamos este atributo por defecto es False (&lt;a title="SqlConnection..::.ConnectionString Property" href="http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx" target="_blank"&gt;revisar aqu&amp;iacute;&lt;/a&gt; los valores por defecto en una cadena de conexi&amp;oacute;n Sql). Esta opci&amp;oacute;n llamada &lt;a title="Multiple Active Result Sets (MARS)" href="http://msdn.microsoft.com/en-us/library/cfa084cz(VS.80).aspx" target="_blank"&gt;MARS&lt;/a&gt;, esta disponible desde Ado.Net 2.0 y permite la ejecuci&amp;oacute;n de varios SqlCommand sin tener que cerrar la conexi&amp;oacute;n y usando la misma cadena de conexi&amp;oacute;n, s&amp;oacute;lo si necesitar&amp;aacute;n usar y ejecutar varios SqlCommand en una misma conexi&amp;oacute;n, se debe dejar el atributo.&lt;/p&gt;
&lt;p&gt;Recursos Adicionales (con ejemplos):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="Streamline your Data Connections by Moving to MARS" href="http://www.devx.com/dbzone/Article/30132/0/page/1" target="_blank"&gt;Streamline your Data Connections by Moving to MARS&lt;/a&gt;, by Laurence Moroney &lt;/li&gt;
&lt;li&gt;&lt;a title="Want to Execute Multiple Queries on a Single Connection? Go to MARS" href="http://www.codeguru.com/csharp/csharp/cs_network/database/article.php/c8715__1/" target="_blank"&gt;Want to Execute Multiple Queries on a Single Connection? Go to MARS&lt;/a&gt;, by Thiru Thangarathinam &lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/89211k9b(VS.71).aspx"&gt;Secure ADO.NET Connections&lt;/a&gt; (extraTip)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=162471" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Ado.NET/default.aspx">Ado.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Code+Snippets/default.aspx">Code Snippets</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Entity+Framework/default.aspx">Entity Framework</category></item></channel></rss>