<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>&#34;Pedro Fernandes&#34;;</title>
	<atom:link href="http://pedrofernandes.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://pedrofernandes.net</link>
	<description>ASP.Net, MVC, Entity Framework, C# e Visual Studio</description>
	<lastBuildDate>Sun, 19 Aug 2012 20:50:31 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='pedrofernandes.net' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>&#34;Pedro Fernandes&#34;;</title>
		<link>http://pedrofernandes.net</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://pedrofernandes.net/osd.xml" title="&#34;Pedro Fernandes&#34;;" />
	<atom:link rel='hub' href='http://pedrofernandes.net/?pushpress=hub'/>
		<item>
		<title>SAAS com NHibernate e Múltiplos Bancos de Dados</title>
		<link>http://pedrofernandes.net/2012/04/14/saas-com-nhibernate-e-multiplos-banco-de-dados/</link>
		<comments>http://pedrofernandes.net/2012/04/14/saas-com-nhibernate-e-multiplos-banco-de-dados/#comments</comments>
		<pubDate>Sun, 15 Apr 2012 01:19:01 +0000</pubDate>
		<dc:creator>pedrofernandesblog</dc:creator>
				<category><![CDATA[NHibernate]]></category>
		<category><![CDATA[SaaS]]></category>

		<guid isPermaLink="false">http://pedrofernandes.net/?p=181</guid>
		<description><![CDATA[Olá pessoal. Últimamente pesquisei sobre alguma forma de desenvolver uma aplicação SAAS (Software as a Service) com o NHibernate. Imagine o seguinte cenário, eu preciso que em tempo de execução o NHibernate troque o banco de dados dependendo do domínio que acessa a aplicação. Por exemplo, se eu entrar na aplicação pelo endereço cliente1.com.br será [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=181&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Olá pessoal.<br />
Últimamente pesquisei sobre alguma forma de desenvolver uma aplicação SAAS (Software as a Service) com o NHibernate.</p>
<p>Imagine o seguinte cenário, eu preciso que em tempo de execução o NHibernate troque o banco de dados dependendo do domínio que acessa a aplicação.</p>
<p>Por exemplo, se eu entrar na aplicação pelo endereço cliente1.com.br será carregado o banco de dados cliente1 que terá todas as informações deste cliente e as informações de cores e tamanhos da interface gráfica. O mesmo acontece para o endereço cliente2.com.br e cliente3.com.br.</p>
<p>Uma das formas que encontrei de conseguir isto é aproveitando a total extensibilidade do NHibernate e plugar nele um ConnectionProvider customizado. o ConnectionProvider é o objeto que fornece as coneções para o NHibernate.</p>
<p>Eis o provider customizado:</p>
<pre class="brush: csharp; title: ; notranslate">
    public class MultiDbConnectionProvider : DriverConnectionProvider
    {
        public override IDbConnection GetConnection()
        {
            IDbConnection connection = Driver.CreateConnection();

            try
            {
                connection.ConnectionString = SaasUtil.GetConnectionStringFromInstance();
                connection.Open();
            }
            catch (DbException)
            {
                connection.Dispose();
                throw;
            }
            return connection;
        }
    }
</pre>
<p>Não é muito complicado, eu apenas sobrescrevo o método GetConnection que cria uma nova conexão passando a connection string específica para aquele determinado cliente.</p>
<p>É preciso também mudar o arquivo de configuração para o novo provider:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;property name=&quot;connection.provider&quot;&gt;
  My.Namespace.DbSpecificConnectionProvider, MyAssembly
&lt;/property&gt;
</pre>
<p>Eu fiz um pequeno teste e funciona perfeitamente, porém não tenho muita certeza de como o NHibernate vai se comportar a nível de cache.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pedrofernandesblog.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pedrofernandesblog.wordpress.com/181/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=181&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pedrofernandes.net/2012/04/14/saas-com-nhibernate-e-multiplos-banco-de-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d9ce86095b6d3884142e2838c8d10c3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pedrofernandesblog</media:title>
		</media:content>
	</item>
		<item>
		<title>ASP.NET MVC 4: ASP.NET Web API</title>
		<link>http://pedrofernandes.net/2012/03/30/asp-net-mvc-4-asp-net-web-api/</link>
		<comments>http://pedrofernandes.net/2012/03/30/asp-net-mvc-4-asp-net-web-api/#comments</comments>
		<pubDate>Fri, 30 Mar 2012 03:40:50 +0000</pubDate>
		<dc:creator>pedrofernandesblog</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[ASP.NET Web API]]></category>

		<guid isPermaLink="false">http://pedrofernandes.net/?p=178</guid>
		<description><![CDATA[Olá pessoal. Hoje vou falar de um novo recurso presente no ASP.NET MVC 4 e que é bem interessante, se trata do ASP.NET Web API, um framework desenvolvido para criarmos uma Web API para nossa aplicação. Web API são um conjunto de serviços expostos através da internet que possibilita a integração entre a aplicação e [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=178&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Olá pessoal.</p>
<p>Hoje vou falar de um novo recurso presente no ASP.NET MVC 4 e que é bem interessante, se trata do ASP.NET Web API, um framework desenvolvido para criarmos uma Web API para nossa aplicação.</p>
<p>Web API são um conjunto de serviços expostos através da internet que possibilita a integração entre a aplicação e diversos clientes que vão desde uma página acessando a aplicação via Ajax até um aplicativo nativo em um dispositivo móvel acessando diretamente a aplicação. Exemplos comuns de Web API são as APIs do Facebook, do Twitter e do LinkedIn.</p>
<p><strong>O que é possível com o ASP.NET Web API?</strong></p>
<p>Para começar, criar uma Web API é como criar um controller comum do ASP.NET MVC, exceto que ele herda da classe ApiController e não retornará uma View, mas sim dados serializados em XML, JSON ou dados de formulários criptografados. O tipo de dado retornado pode ser definido no lado servidor ou negociado com o cliente de forma dinâmica. Veja dois exemplos abaixo:</p>
<pre class="brush: csharp; title: ; notranslate">
    public class ProdutoController : ApiController
    {
            public HttpResponseMessage GetProduto()
            {
                Produto produto = new Produto();
                produto.Codigo = 1;
                produto.Valor = 100.00M;
                produto.Nome = &quot;TESTE&quot;;

                HttpResponseMessage&lt;Produto&gt; response = new HttpResponseMessage&lt;Produto&gt;(produto,
                            new MediaTypeHeaderValue(&quot;application/json&quot;));

                return response;
            }
    }
</pre>
<p>Ao chamar o endereço <a href="http://localhost" rel="nofollow">http://localhost</a>:{PORTA}/api/produto/getproduto, irá aparecer o objeto Produto serializado em XML.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;Produto xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot;&gt;
&lt;Nome&gt;TESTE&lt;/Nome&gt;
&lt;Valor&gt;100.00&lt;/Valor&gt;
&lt;Codigo&gt;1&lt;/Codigo&gt;
&lt;/Produto&gt;
</pre>
<p>Mudando a linha onde tem:<br />
MediaTypeHeaderValue(&#8220;application/xml&#8221;)<br />
por<br />
MediaTypeHeaderValue(&#8220;application/json&#8221;)<br />
o mesmo Produto é retornado em JSON:</p>
<p>{&#8220;Codigo&#8221;:1,&#8221;Nome&#8221;:&#8221;TESTE&#8221;,&#8221;Valor&#8221;:100.00}</p>
<p>Outro recurso bem interessante é que podemos retornar um objeto IQueryable e realizar consultas nele diretamente pela chamada da URL!<br />
Usando as convenções de URL do protocolo OData. Por exemplo, imagine o seguinte método em nosso ProdutoController:</p>
<pre class="brush: csharp; title: ; notranslate">
public IQueryable&lt;Produto&gt; GetListaProdutos()
{
    return repository.GetProdutos().AsQueryable();
}
</pre>
<p>Usando as convenções do OData, podemos por exemplo, determinar o filtro da lista pela URL:</p>
<p><a href="http://localhost" rel="nofollow">http://localhost</a>:{PORTA}/api/produto/getlistaprodutos?$orderby=Nome</p>
<p>Estes recursos são muito úteis quando queremos disponibilizar algum tipo de integração com nossa aplicação, seja apenas para consultar os dados quanto para executar algum tipo de função como postar uma mensagem no mural do Facebook por exemplo.</p>
<p>Isso é apenas uma parte do que podemos fazer com o ASP.NET Web API.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pedrofernandesblog.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pedrofernandesblog.wordpress.com/178/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=178&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pedrofernandes.net/2012/03/30/asp-net-mvc-4-asp-net-web-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d9ce86095b6d3884142e2838c8d10c3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pedrofernandesblog</media:title>
		</media:content>
	</item>
		<item>
		<title>Novidades do Visual Studio 11 &#8211; Editor de CSS</title>
		<link>http://pedrofernandes.net/2012/03/18/novidades-do-visual-studio-11-editor-de-css/</link>
		<comments>http://pedrofernandes.net/2012/03/18/novidades-do-visual-studio-11-editor-de-css/#comments</comments>
		<pubDate>Sun, 18 Mar 2012 17:04:06 +0000</pubDate>
		<dc:creator>pedrofernandesblog</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[.Net Framework 4.5]]></category>
		<category><![CDATA[ASP.NET 4.5]]></category>
		<category><![CDATA[Visual Studio 11]]></category>

		<guid isPermaLink="false">http://pedrofernandes.net/?p=168</guid>
		<description><![CDATA[Olá pessoal, hoje vou falar de mais novidades sobre o Visual Studio 11, dessa vez sobre as melhorias no editor de CSS. A nova versão do Visual Studio vem com grandes novidades no editor de CSS, para melhorar a produtividade, a organização do código e a compatibilidade entre navegadores. Color Picker Nas versões anteriores do [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=168&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Olá pessoal, hoje vou falar de mais novidades sobre o Visual Studio 11, dessa vez sobre as melhorias no editor de CSS.</p>
<p>A nova versão do Visual Studio vem com grandes novidades no editor de CSS, para melhorar a produtividade, a organização do código e a compatibilidade entre navegadores.</p>
<p><strong>Color Picker</strong></p>
<p>Nas versões anteriores do Visual Studio, o intellisense do editor de CSS nos fornecia uma lista de valores de cor pré definidos como Silver, Yellow, Green etc. O Visual Studio 11 substitui esse intellisense de cores por um color picker mais robusto e com mais opções de cores, podemos escolher entre as cores pré definidas ou adicionar uma nova cor.</p>
<p style="text-align:center;"><a href="http://pedrofernandesblog.files.wordpress.com/2012/03/1.png"><img class="size-full wp-image-169 aligncenter" title="1" src="http://pedrofernandesblog.files.wordpress.com/2012/03/1.png?w=604" alt=""   /></a></p>
<p>Se você clicar em (+), irá se expandir um color picker semelhante ao do Adobe Photoshop para seleção de cores. Podemos também definir o canal alfa que será automaticamente convertido em uma cor CSS3 RGBA. Com o recurso de &#8220;Pick&#8221;, podemos selecionar uma cor de um site aberto no navegador ou de um aplicativo aberto.</p>
<p><a href="http://pedrofernandesblog.files.wordpress.com/2012/03/2.png"><img class="aligncenter size-full wp-image-170" title="2" src="http://pedrofernandesblog.files.wordpress.com/2012/03/2.png?w=604" alt=""   /></a></p>
<p><strong>Código Coss-Browser</strong></p>
<p><strong></strong><br />
Desenvolver um site compatível com todos os navegadores as vezes se torna um pouco repetitivo quando há propriedades específicas para cada navegador, por exemplo -moz-border-radius, -webkit-border-radius e -o-border-radius. O Visual Studio 11 possui um suporte para gerar todas as propriedades de navegadores específicos automaticamente, por exemplo, basta apenas escrevermos <strong>transition</strong> no editor de CSS:</p>
<p><a href="http://pedrofernandesblog.files.wordpress.com/2012/03/3.png"><img class="aligncenter size-full wp-image-171" title="3" src="http://pedrofernandesblog.files.wordpress.com/2012/03/3.png?w=604" alt=""   /></a></p>
<p>Em seguida, se apertamos o [TAB], o Visual Studio 11 irá gerar o código de <strong>transition</strong> específicos para cada navegador para oferecer o suporte cross-browser. Também é possível alterar o valor de apenas uma propriedade e propagar a alteração para as outras.</p>
<p><a href="http://pedrofernandesblog.files.wordpress.com/2012/03/4.png"><img class="aligncenter size-full wp-image-172" title="4" src="http://pedrofernandesblog.files.wordpress.com/2012/03/4.png?w=604" alt=""   /></a></p>
<p><strong>Hierarquia de CSS</strong></p>
<p>Preciso nem falar muito sobre esse recurso, basta olhar a imagem para entender do que se trata:</p>
<p><a href="http://pedrofernandesblog.files.wordpress.com/2012/03/5.png"><img class="aligncenter size-full wp-image-173" title="5" src="http://pedrofernandesblog.files.wordpress.com/2012/03/5.png?w=604" alt=""   /></a></p>
<p>Agora podemos identar o código CSS para tornar mais legível uma relação pai-filho de regras. Na versão anterior do Visual Studio, para fazer algo parecido, era necessário desabilitar a identação automática de CSS.</p>
<p>Finalmente temos um editor de CSS robusto, cheio de recursos e não mais preso ao Internet Explorer. A nova versão do Visual Studio, irá tornar o desenvolvimento de estilos CSS mais fácil e rápido, com muitos recursos que faziam falta como o color picker. e o suporte à estilos compatíveis com outros navegadores.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pedrofernandesblog.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pedrofernandesblog.wordpress.com/168/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=168&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pedrofernandes.net/2012/03/18/novidades-do-visual-studio-11-editor-de-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d9ce86095b6d3884142e2838c8d10c3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pedrofernandesblog</media:title>
		</media:content>

		<media:content url="http://pedrofernandesblog.files.wordpress.com/2012/03/1.png" medium="image">
			<media:title type="html">1</media:title>
		</media:content>

		<media:content url="http://pedrofernandesblog.files.wordpress.com/2012/03/2.png" medium="image">
			<media:title type="html">2</media:title>
		</media:content>

		<media:content url="http://pedrofernandesblog.files.wordpress.com/2012/03/3.png" medium="image">
			<media:title type="html">3</media:title>
		</media:content>

		<media:content url="http://pedrofernandesblog.files.wordpress.com/2012/03/4.png" medium="image">
			<media:title type="html">4</media:title>
		</media:content>

		<media:content url="http://pedrofernandesblog.files.wordpress.com/2012/03/5.png" medium="image">
			<media:title type="html">5</media:title>
		</media:content>
	</item>
		<item>
		<title>O Novo Entity Framework 4.3</title>
		<link>http://pedrofernandes.net/2012/02/26/o-novo-entity-framework-4-3/</link>
		<comments>http://pedrofernandes.net/2012/02/26/o-novo-entity-framework-4-3/#comments</comments>
		<pubDate>Sun, 26 Feb 2012 15:36:44 +0000</pubDate>
		<dc:creator>pedrofernandesblog</dc:creator>
				<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[Code First Migration]]></category>
		<category><![CDATA[Entity Framework 4.3]]></category>

		<guid isPermaLink="false">http://pedrofernandes.net/?p=157</guid>
		<description><![CDATA[Para quem ainda não sabe, foi lançado recentemente a nova versão do Entity Framework 4.3 Entre algumas novidades estão as seguintes: Code First Migration &#8211; É a novidade mais interessante e que muitas pessoas esperavam, agora quando alteramos nosso modelo, o banco de dados não precisa ser recriado do zero novamente. Com o novo recurso [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=157&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Para quem ainda não sabe, foi lançado recentemente a nova versão do Entity Framework 4.3</p>
<p>Entre algumas novidades estão as seguintes:</p>
<p><strong>Code First Migration</strong> &#8211; É a novidade mais interessante e que muitas pessoas esperavam, agora quando alteramos nosso modelo, o banco de dados não precisa ser recriado do zero novamente. Com o novo recurso de migração as alterações no modelo serão atualizadas no banco de dados.</p>
<p><strong>Remoção da tabela EdmMetadata.</strong></p>
<p><strong>Data Annotations em propriedades não públicas</strong> &#8211; Agora as anottations aplicadas em propriedades private, internal e protected não serão ignoradas pelo Entity Framework.</p>
<p>Você pode ver mais detalhes sobre o Entity Framework 4.3 clicando no link abaixo:<br />
<a href="http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-released.aspx"> http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-released.aspx</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pedrofernandesblog.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pedrofernandesblog.wordpress.com/157/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=157&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pedrofernandes.net/2012/02/26/o-novo-entity-framework-4-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d9ce86095b6d3884142e2838c8d10c3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pedrofernandesblog</media:title>
		</media:content>
	</item>
		<item>
		<title>Como Formatar Datas com string.Format no C#</title>
		<link>http://pedrofernandes.net/2012/02/11/como-formatar-datas-com-string-format-no-c/</link>
		<comments>http://pedrofernandes.net/2012/02/11/como-formatar-datas-com-string-format-no-c/#comments</comments>
		<pubDate>Sat, 11 Feb 2012 23:59:05 +0000</pubDate>
		<dc:creator>pedrofernandesblog</dc:creator>
				<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[DateTime]]></category>

		<guid isPermaLink="false">http://pedrofernandes.net/?p=149</guid>
		<description><![CDATA[Este exemplo abaixo, mostra como podemos formatar um objeto de data DateTime em diversos formatos usando o String.Format. Quando trabalhamos com data, às vezes é necessário o uso de formatos de data customizados, como por exemplo, uma data no formato mm/yyyy de uma fatura, uma data de um chamado aberto sem os segundos, ou ainda [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=149&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Este exemplo abaixo, mostra como podemos formatar um objeto de data DateTime em diversos formatos usando o <a href="http://msdn.microsoft.com/en-us/library/system.string.format.aspx">String.Format</a>.</p>
<p>Quando trabalhamos com data, às vezes é necessário o uso de formatos de data customizados, como por exemplo, uma data no formato mm/yyyy de uma fatura, uma data de um chamado aberto sem os segundos, ou ainda uma data por extenso para o rodapé de um relatório.</p>
<p>Para criar os formatos de data customizados, usamos algumas letras específicas onde cada letra significa uma parte da data. <strong>y</strong> (ano), <strong>M</strong> (mês), <strong>d</strong> (dia), <strong>h</strong> (hora 12), <strong>H</strong> (hora 24), <strong>m</strong> (minuto),<strong> s</strong> (segundo), <strong>f</strong> (fração de segundo), <strong>F</strong> (fração de segundo, mostrando zeros após a unidade inteira ex: 0.2000), <strong>t</strong> (P.M ou A.M) e <strong>z</strong> (time zone).</p>
<pre class="brush: csharp; title: ; notranslate">
// Criando uma data 09/03/2008 16:05:07.123
DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123);

String.Format(&quot;{0:y yy yyy yyyy}&quot;, dt);  // &quot;8 08 008 2008&quot;    ano
String.Format(&quot;{0:M MM MMM MMMM}&quot;, dt);  // &quot;3 03 Mar Março&quot;   mês
String.Format(&quot;{0:d dd ddd dddd}&quot;, dt);  // &quot;9 09 Dom Domingo&quot; dia
String.Format(&quot;{0:h hh H HH}&quot;,     dt);  // &quot;4 04 16 16&quot;       hora 12/24
String.Format(&quot;{0:m mm}&quot;,          dt);  // &quot;5 05&quot;             minuto
String.Format(&quot;{0:s ss}&quot;,          dt);  // &quot;7 07&quot;             segundo
String.Format(&quot;{0:f ff fff ffff}&quot;, dt);  // &quot;1 12 123 1230&quot;    fração de segundo
String.Format(&quot;{0:F FF FFF FFFF}&quot;, dt);  // &quot;1 12 123 123&quot;     fração de segundo sem zero
String.Format(&quot;{0:t tt}&quot;,          dt);  // &quot;P PM&quot;             A.M. ou P.M.
String.Format(&quot;{0:z zz zzz}&quot;,      dt);  // &quot;-6 -06 -06:00&quot;    time zone
</pre>
<p>Quando usamos o separados de data &#8220;/&#8221; e o separador de tempo &#8220;:&#8221; eles serão substituídos pelo separador de data e de tempo definidos na cultura atual com o DateTimeForma­tInfo.DateSepa­rator e o DateTimeForma­tInfo.TimeSepa­rator.</p>
<pre class="brush: csharp; title: ; notranslate">
// a cultura alemã substitui o separador de data &quot;/&quot; pelo &quot;.&quot;
String.Format(&quot;{0:d/M/yyyy HH:mm:ss}&quot;, dt); // &quot;9/3/2008 16:05:07&quot; - Português Brasileiro (pt-BR)
String.Format(&quot;{0:d/M/yyyy HH:mm:ss}&quot;, dt); // &quot;9.3.2008 16:05:07&quot; - Alemã (de-DE)
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pedrofernandesblog.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pedrofernandesblog.wordpress.com/149/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=149&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pedrofernandes.net/2012/02/11/como-formatar-datas-com-string-format-no-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d9ce86095b6d3884142e2838c8d10c3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pedrofernandesblog</media:title>
		</media:content>
	</item>
		<item>
		<title>AuthorizationAttribute Customizado no ASP.NET MVC</title>
		<link>http://pedrofernandes.net/2012/02/03/authorizationattribute-customizado-no-asp-net-mvc/</link>
		<comments>http://pedrofernandes.net/2012/02/03/authorizationattribute-customizado-no-asp-net-mvc/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 16:09:03 +0000</pubDate>
		<dc:creator>pedrofernandesblog</dc:creator>
				<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[AuthorizationAttribute]]></category>

		<guid isPermaLink="false">http://pedrofernandes.net/?p=147</guid>
		<description><![CDATA[Vou mostrar um exemplo prático de como podemos criar um AuthorizationAttribute customizado para, por exemplo, redirecionar para uma página específica em caso de acesso não autorizado. Para usar fazemos assim: Se o nome do usuário logado não for Pedro, será redirecionado para o controller Login e a action NaoPermitido.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=147&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Vou mostrar um exemplo prático de como podemos criar um AuthorizationAttribute customizado para, por exemplo, redirecionar para uma página específica em caso de acesso não autorizado.</p>
<pre class="brush: csharp; title: ; notranslate">
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1.FilterAttributes
{
    public class MyAuthorizationAttribute : ActionFilterAttribute
    {
        private string _userName;

        public MyAuthorizationAttribute(string userName)
        {
            _userName = userName;
        }

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);

            if (!UserIsAuthenticated())
            {
                // Redirect to login page
                filterContext.Result = new RedirectToRouteResult(
                    new RouteValueDictionary
                    {
                        { &quot;controller&quot;, &quot;Login&quot; },
                        { &quot;action&quot;, &quot;NaoPermitido&quot; }
                    });
            }
        }

        private bool UserIsAuthenticated()
        {
            return HttpContext.Current.User.Identity.Name == _userName;
        }
    }
}
</pre>
<p>Para usar fazemos assim:</p>
<pre class="brush: csharp; title: ; notranslate">
[MyAuthorization(&quot;Pedro&quot;)]
public ActionResult Teste() ...
</pre>
<p>Se o nome do usuário logado não for Pedro, será redirecionado para o controller Login e a action NaoPermitido.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pedrofernandesblog.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pedrofernandesblog.wordpress.com/147/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=147&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pedrofernandes.net/2012/02/03/authorizationattribute-customizado-no-asp-net-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d9ce86095b6d3884142e2838c8d10c3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pedrofernandesblog</media:title>
		</media:content>
	</item>
		<item>
		<title>Como Excluir Várias Entidades no NHibernate</title>
		<link>http://pedrofernandes.net/2012/01/28/como-excluir-varias-entidades-no-nhibernate/</link>
		<comments>http://pedrofernandes.net/2012/01/28/como-excluir-varias-entidades-no-nhibernate/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 01:04:53 +0000</pubDate>
		<dc:creator>pedrofernandesblog</dc:creator>
				<category><![CDATA[NHibernate]]></category>
		<category><![CDATA[Acesso a Dados]]></category>

		<guid isPermaLink="false">http://pedrofernandes.net/?p=141</guid>
		<description><![CDATA[Quem já usou o Nhibernate, provavelmente já sentiu falta de algum recurso onde podemos remover de uma vez vários itens, pois com o método Delete do objeto de sessão só é possível deletar um objeto por vez. Há uma forma de implementar uma exclusão múltipla no NHibernate usando a cláusula IN no HQL:<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=141&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Quem já usou o Nhibernate, provavelmente já sentiu falta de algum recurso onde podemos remover de uma vez vários itens, pois com o método <strong>Delete </strong>do objeto de sessão só é possível deletar um objeto por vez.</p>
<p>Há uma forma de implementar uma exclusão múltipla no NHibernate usando a cláusula IN no HQL:</p>
<pre class="brush: csharp; title: ; notranslate">
var idObjetos = new List&lt;int&gt;() { 5,3,6,7 };

_session.CreateQuery(&quot;DELETE FROM Produto p WHERE p.Id = IN :idObjetos&quot;)
.setParameterList(&quot;idObjetos&quot;, idObjetos)
.executeUpdate();
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pedrofernandesblog.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pedrofernandesblog.wordpress.com/141/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=141&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pedrofernandes.net/2012/01/28/como-excluir-varias-entidades-no-nhibernate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d9ce86095b6d3884142e2838c8d10c3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pedrofernandesblog</media:title>
		</media:content>
	</item>
		<item>
		<title>ObjectContext global no Entity Framework: Usar ou não?</title>
		<link>http://pedrofernandes.net/2012/01/28/objectcontext-global-no-entity-framework-usar-ou-nao/</link>
		<comments>http://pedrofernandes.net/2012/01/28/objectcontext-global-no-entity-framework-usar-ou-nao/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 18:22:09 +0000</pubDate>
		<dc:creator>pedrofernandesblog</dc:creator>
				<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[ObjectContext]]></category>

		<guid isPermaLink="false">http://pedrofernandes.net/?p=138</guid>
		<description><![CDATA[Algumas pessoas que usam o Entity Framework, já deve ter se perguntado, será que é recomendado utilizar uma única instância global do ObjectContext ou é melhor uma instância em cada escopo de execução? A resposta é, depende do cenário. Para aplicações onde terá uma única execução como um Windows Forms, ou aplicações web que não [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=138&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Algumas pessoas que usam o Entity Framework, já deve ter se perguntado, será que é recomendado utilizar uma única instância global do ObjectContext ou é melhor uma instância em cada escopo de execução?</p>
<p>A resposta é, depende do cenário. Para aplicações onde terá uma única execução como um Windows Forms, ou aplicações web que não variam com o usuário como um editor de imagens online por exemplo, pode ter vantagens usar uma única instância do ObjectContext como reduzir o número de objetos na memória e gerenciar melhor como estes objetos serão usados. Você, no entanto, precisará gerenciar cuidadosamente o consumo de memória de seu aplicativo, porque o ObjectContext irá manter uma referência de cada entidade recuperada através dele, a menos que você use uma consulta NoTracking ou execute de forma explícita.</p>
<p>Para aplicações ASP.NET ou serviços, o recomendado é você não utilizar um único ObjectContext global por diversas razões, incluindo problemas de execução (O ObjectContext não é thread-safe, ou seja, não suporta multi-threading), muitas referências a entidades em memória (porque o contexto mantém referências a objetos recuperados através dele, como mencionado acima) e a consistência dos dados (como os dados no banco de dados evolui ao longo do tempo, e pode ficar fora de sincronia com os dados no seu repositório de dados a menos que você explicitamente defina a consulta utilizando OverwriteChanges e MergeOption).</p>
<p>&nbsp;</p>
<p><strong>Observações:</strong></p>
<p>Pessoal, este texto acima é parte de uma contribuição minha na wiki do Technet da Microsoft onde explico sobre o ObjectContext com base em um texto do próprio pessoal da Microsoft, gostaria de opiniões sobre o texto, se está bem explicado, se falta mais detalhes etc..</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pedrofernandesblog.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pedrofernandesblog.wordpress.com/138/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=138&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pedrofernandes.net/2012/01/28/objectcontext-global-no-entity-framework-usar-ou-nao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d9ce86095b6d3884142e2838c8d10c3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pedrofernandesblog</media:title>
		</media:content>
	</item>
		<item>
		<title>Passei na Prova 70-519 e Agora sou MCPD</title>
		<link>http://pedrofernandes.net/2012/01/25/passei-na-prova-70-519-e-agora-sou-mcpd/</link>
		<comments>http://pedrofernandes.net/2012/01/25/passei-na-prova-70-519-e-agora-sou-mcpd/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 22:23:19 +0000</pubDate>
		<dc:creator>pedrofernandesblog</dc:creator>
				<category><![CDATA[Certificação]]></category>
		<category><![CDATA[70-519]]></category>
		<category><![CDATA[MCPD]]></category>

		<guid isPermaLink="false">http://pedrofernandes.net/?p=133</guid>
		<description><![CDATA[Hoje dia 25/01/2012 passei na prova 70-519 e agora sou um MCPD em &#8220;Designing and Developing Web Applications Using Microsoft .NET Framework 4&#8243; Vou comentar um pouco sobre a prova. Eu considerei a prova muito difícil, tinham questões em que todas as respostas poderiam ser as certas, cabendo apenas escolher a mais adequada. Não estudei [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=133&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Hoje dia 25/01/2012 passei na prova 70-519 e agora sou um MCPD em &#8220;Designing and Developing Web Applications Using Microsoft .NET Framework 4&#8243;</p>
<p>Vou comentar um pouco sobre a prova.</p>
<p>Eu considerei a prova muito difícil, tinham questões em que todas as respostas poderiam ser as certas, cabendo apenas escolher a mais adequada.</p>
<p>Não estudei muito para esta prova, pois como não fiz nenhum curso, meu conhecimento é completamente autodidata e eu não sabia o que estudar.</p>
<p>Como eu sabia que a prova exigia uma certa vivência, como no próprio site da certificação diz, desde a primeira prova que eu fiz (70-515) eu venho tentando adquirir experiência criando vários projetos simples como treino, utilizando Entity Framework, ASP.NET MVC, ASP.NET Web Forms, várias formas de autenticação, várias formas de captura de erros na aplicação. E isso ajudou, e muito.</p>
<p>Desejo boa sorte a quem deseja realizar este exame, e qualquer dúvida entre em contato comigo pelo formulário do site.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pedrofernandesblog.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pedrofernandesblog.wordpress.com/133/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=133&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pedrofernandes.net/2012/01/25/passei-na-prova-70-519-e-agora-sou-mcpd/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d9ce86095b6d3884142e2838c8d10c3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pedrofernandesblog</media:title>
		</media:content>
	</item>
		<item>
		<title>Sum com Linq e valores Nullable</title>
		<link>http://pedrofernandes.net/2012/01/22/sum-com-linq-e-valores-nullable/</link>
		<comments>http://pedrofernandes.net/2012/01/22/sum-com-linq-e-valores-nullable/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 19:55:39 +0000</pubDate>
		<dc:creator>pedrofernandesblog</dc:creator>
				<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[Null Coalescing]]></category>
		<category><![CDATA[Nullable]]></category>
		<category><![CDATA[Sum]]></category>

		<guid isPermaLink="false">http://pedrofernandes.net/?p=126</guid>
		<description><![CDATA[Vamos imaginar a seguinte situação. Temos uma lista de produtos com nome e valor, o valor do produto pode ser nulo: vamos agora tentar obter o valor total dos produtos: Ao rodar o código, se houver um produto com valor nulo, tomamos um erro. The cast to value type &#8216;Decimal&#8217; failed because the materialized value [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=126&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Vamos imaginar a seguinte situação.</p>
<p>Temos uma lista de produtos com nome e valor, o valor do produto pode ser nulo:</p>
<pre class="brush: csharp; title: ; notranslate">
public class Produto {
	public string Nome { get; set; }
	public decimal? Valor { get; set; }
}
</pre>
<p>vamos agora tentar obter o valor total dos produtos:</p>
<pre class="brush: csharp; title: ; notranslate">
List lista = db.GetProdutos();
decimal soma = lista.Sum(c =&gt; c.Valor);
</pre>
<p>Ao rodar o código, se houver um produto com valor nulo, tomamos um erro.<br />
<span style="color:maroon;font-size:19px;font-family:Verdana;"><em>The cast to value type &#8216;Decimal&#8217; failed because the materialized value is null. Either the result type&#8217;s generic parameter or the query must use a nullable type.</em></span><br />
Como resolver este problema?<br />
Para resolver é bem simples, precisamos apenas usar um comando muito útil no C# e que pouca gente conhece, o Null Coalescing (??):</p>
<pre class="brush: csharp; title: ; notranslate">
decimal soma = lista.Sum(c =&gt; c.Valor ?? 0);
</pre>
<p>ou com Linq:</p>
<pre class="brush: csharp; title: ; notranslate">
decimal soma = (from p in lista
              select p.Valor ?? 0).Sum();
</pre>
<p>No exemplo acima, com o ?? estou dizendo que é para retornar o Valor diferente de nulo ou 0, Semelhante ao If abaixo:<br />
(p.Valor != null) : p.Valor ? 0</p>
<p>Segue abaixo um código completo mostrando o funcionamento da dica, basta criar um novo projeto <strong>Console Application</strong> e inserir o código abaixo:</p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    public class Produto
    {
        public string Nome { get; set; }
        public decimal? Valor { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List&lt;Produto&gt; lista = new List&lt;Produto&gt;();
            lista.Add(new Produto
            {
                Nome = &quot;Teste 1&quot;,
                Valor = (decimal)54.2
            });
            lista.Add(new Produto
            {
                Nome = &quot;Teste 2&quot;,
                Valor = null
            });
            lista.Add(new Produto
            {
                Nome = &quot;Teste 3&quot;,
                Valor = 65
            });

            decimal soma = (from p in lista
                            select p.Valor ?? 0).Sum();

            Console.WriteLine(soma);
            Console.ReadKey();
        }
    }
}
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pedrofernandesblog.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pedrofernandesblog.wordpress.com/126/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pedrofernandes.net&#038;blog=28594537&#038;post=126&#038;subd=pedrofernandesblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pedrofernandes.net/2012/01/22/sum-com-linq-e-valores-nullable/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d9ce86095b6d3884142e2838c8d10c3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pedrofernandesblog</media:title>
		</media:content>
	</item>
	</channel>
</rss>
