<?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>Silvio Delgado  &#187; C#</title>
	<atom:link href="http://www.silviodelgado.com.br/tag/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.silviodelgado.com.br</link>
	<description>ASP.NET, MVC, C#, Design Patterns, jQuery, CSS, Webstandards, SEO et cetera</description>
	<lastBuildDate>Thu, 15 Dec 2011 04:37:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Castle.ActiveRecord e SessionScope &#8211; resolvendo problemas de sessão</title>
		<link>http://www.silviodelgado.com.br/castle-activerecord-e-sessionscope-resolvendo-problemas-de-sessao/</link>
		<comments>http://www.silviodelgado.com.br/castle-activerecord-e-sessionscope-resolvendo-problemas-de-sessao/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 23:31:26 +0000</pubDate>
		<dc:creator>Silvio Delgado</dc:creator>
				<category><![CDATA[ActiveRecord]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[sessão]]></category>

		<guid isPermaLink="false">http://www.silviodelgado.com.br/?p=160</guid>
		<description><![CDATA[Há algum tempo eu vinha tendo um problema com a utilização de coleções Lazy Load nas propriedades de algumas classes, através do meu framework. É bom que se fale logo no início que esse framework (no seu módulo de persistência) é baseado no padrão Repository, utilizando, entre outros métodos, o ActiveRecord, do Castle Project, para [...]]]></description>
			<content:encoded><![CDATA[<p>Há algum tempo eu vinha tendo um problema com a utilização de coleções Lazy Load nas propriedades de algumas classes, através do meu framework.</p>
<p>É bom que se fale logo no início que esse framework (no seu módulo de persistência) é baseado no padrão Repository, utilizando, entre outros métodos, o ActiveRecord, do Castle Project, para modelar as classes e acessar o banco (rodando Linq nas consultas).</p>
<p>Pois bem, dado isto, um problema que encontrei diversas vezes foi na hora de chamar uma propriedade que é uma coleção e estava setado como Lazy=true no atributo &#8220;HasMany&#8221;.</p>
<p>Ocorria o seguinte erro:</p>
<p><code>Initializing[ClasseModelada#1]-failed to lazily initialize a collection of role: PropriedadeDeLista, no session or session was closed</code></p>
<p><span id="more-160"></span></p>
<p>Ou seja, o servidor indicava que não conseguia acessar os dados da coleção lazy por falta de uma sessão do ActiveRecord com o banco.</p>
<p>Durante muito tempo eu usei uma solução bem simples, de apenas 1 linha de código, e que funciona perfeitamente, mas que era chata, pois quando a esquecia, lá vinha o erro novamente:</p>
<p><code>using(new SessionScope())<br />
{<br />
... // código que acessa a propriedade Lazy<br />
}</code></p>
<p>Para resolver esse &#8220;pequeno&#8221; problema, temos duas soluções possíveis:</p>
<p>A primeira, mais complicada, é inserindo no arquivo Global.asax.cs o seguinte código:</p>
<p><code>protected void Application_BeginRequest(object sender, EventArgs e)<br />
{<br />
HttpContext.Current.Items.Add("ar.sessionscope", new Castle.ActiveRecord.SessionScope());<br />
}</code></p>
<p><code>protected void Application_EndRequest(object sender, EventArgs e)<br />
{<br />
try<br />
{<br />
Castle.ActiveRecord.SessionScope scope = HttpContext.Current.Items["ar.sessionscope"] as Castle.ActiveRecord.SessionScope;<br />
if (scope != null)<br />
scope.Dispose();<br />
}<br />
catch (Exception ex)<br />
{<br />
HttpContext.Current.Trace.Warn("Error", "EndRequest: " + ex.Message, ex);<br />
}<br />
}</code></p>
<p>Ou seja, a cada requisição da aplicação, é adicionado no contexto atual um SessionScope novo. Ao final da requisição, esse SessionScope é destruído.</p>
<p>Uma alternativa (melhor, na minha opinião) é a 2ª abordagem:</p>
<p>Apague todo o código acima e, no arquivo Web.config, insira o seguinte código:</p>
<p><code>&lt;system.web&gt;<br />
&lt;httpModules&gt;<br />
&lt;add name="ar.sessionscope" type="Castle.ActiveRecord.Framework.SessionScopeWebModule, Castle.ActiveRecord"/&gt;<br />
&lt;/httpModules&gt;<br />
&lt;/system.web&gt;</code></p>
<p>Pronto! O gerenciador dos módulos Http fará a manipulação do SessionScope automaticamente para a aplicação.</p>
<p>Todas as opções são eficientes, porém a 1ª abordagem perde um pouco em desempenho, pois, provavelmente, você não acessa o banco em 100% das requisições da sua aplicação. É necessário verificar se o mesmo ocorre com a 2ª opção. Mas esta análise de desempenho eu deixo pra você colocar nos comentários.</p>
<p>Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.silviodelgado.com.br/castle-activerecord-e-sessionscope-resolvendo-problemas-de-sessao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DateTime.CompareTo() Desvendado</title>
		<link>http://www.silviodelgado.com.br/datetime-compareto-desvendado/</link>
		<comments>http://www.silviodelgado.com.br/datetime-compareto-desvendado/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 19:47:44 +0000</pubDate>
		<dc:creator>Silvio Delgado</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[técnicas]]></category>

		<guid isPermaLink="false">http://www.silviodelgado.com.br/?p=126</guid>
		<description><![CDATA[Um problema recorrente no desenvolvimento é a utilização do CompareTo para DateTime. Apesar de ser uma solução ótima, melhor do que a comparação simples (=, &#62;, &#60;), há sempre uma pequena confusão com o resultado da operação. Os valores possíveis são 1, 0 ou -1. Mas, afinal, qual deles vem em que situação? Veja a [...]]]></description>
			<content:encoded><![CDATA[<p>Um problema recorrente no desenvolvimento é a utilização do CompareTo para DateTime.</p>
<p>Apesar de ser uma solução ótima, melhor do que a comparação simples (=, &gt;, &lt;), há sempre uma pequena confusão com o resultado da operação.</p>
<p>Os valores possíveis são 1, 0 ou -1. Mas, afinal, qual deles vem em que situação?</p>
<p><span id="more-126"></span></p>
<p>Veja a tabela abaixo e acabe com as dúvidas de uma vez por todas:</p>
<table border="1">
<tbody>
<tr>
<th>Valor</th>
<th>Descrição</th>
</tr>
<tr>
<td>&lt; Zero</td>
<td>A instância é menor do que a data do parâmetro</td>
</tr>
<tr>
<td>Zero</td>
<td>A instância é igual à data do parâmetro</td>
</tr>
<tr>
<td>&gt; Zero</td>
<td>A instância é maior do que a data do parâmetro</td>
</tr>
</tbody>
</table>
<p>Exemplo:</p>
<p><code><br />
if (data.CompareTo(new DateTime(2009, 11, 17)) &gt; 0)<br />
{<br />
// "data" é maior do que o dia de hoje<br />
}<br />
</code></p>
<p>Resumindo, se a &#8220;data&#8221;, que está na esquerda, for maior, o resultado do if é true.</p>
<p>Ou seja, se você fizer um data.CompareTo(outraData), caso o resultado retorne 1, é porque &#8220;data&#8221; é maior do que &#8220;outraData&#8221; (veja que &#8220;data&#8221; está à esqueda, equivale ao &#8220;&gt; 0&#8243;). Caso retorne 0, elas são iguais. Caso retorne -1, &#8220;outraData&#8221; é maior do que &#8220;data&#8221; (repare que &#8220;outraData&#8221; está à direita, equivale ao &#8220;&lt; 0&#8243;).</p>
<table border="1">
<tbody>
<tr>
<th>Maior</th>
<th>Igual</th>
<th>Menor</th>
</tr>
<tr>
<td style="text-align: center;">1</td>
<td style="text-align: center;">0</td>
<td style="text-align: center;">-1</td>
</tr>
</tbody>
</table>
<p>Espero ter ajudado. <img src='http://www.silviodelgado.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Amplexos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.silviodelgado.com.br/datetime-compareto-desvendado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

