<?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>AndrePassos.net</title>
	<atom:link href="http://andrepassos.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://andrepassos.net</link>
	<description>Tecnologia e Desenvolvimento .net</description>
	<lastBuildDate>Wed, 30 Mar 2011 22:20:34 +0000</lastBuildDate>
	<language>pt</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Prova beta 70-599 Pro: Designing and Developing Windows Phone 7 Applications</title>
		<link>http://andrepassos.net/2011/03/prova-beta-70-599-pro-designing-and-developing-windows-phone-7-applications/</link>
		<comments>http://andrepassos.net/2011/03/prova-beta-70-599-pro-designing-and-developing-windows-phone-7-applications/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 23:26:50 +0000</pubDate>
		<dc:creator>André Passos</dc:creator>
				<category><![CDATA[Certificação]]></category>
		<category><![CDATA[70-599]]></category>
		<category><![CDATA[certificação]]></category>
		<category><![CDATA[WP7]]></category>

		<guid isPermaLink="false">http://andrepassos.net/?p=59</guid>
		<description><![CDATA[Preparem os estudos! A prova beta para o exame 70-599 MCPD em desenvolvimento Windows Phone 7 será anunciada dentro de alguns dias. Desenvolvedores que atualizaram o perfil no SME, já começaram a receber os convites. Só para adiantar um pouco o registro para as provas começaram hoje (29/03) e serão aplicadas entre os dias 19 [...]]]></description>
			<content:encoded><![CDATA[<p>Preparem os estudos! A prova beta para o exame 70-599 MCPD em desenvolvimento Windows Phone 7 será anunciada dentro de alguns dias.  Desenvolvedores que atualizaram o perfil no SME, já começaram a receber os convites.  Só para adiantar um pouco o registro para as provas começaram hoje (29/03) e serão aplicadas entre os dias 19 de abril e 4 de maio. A prova está diponível na Prometric pelo título de &#8221;Exam 71-599, Pro: Designing and Developing Windows Phone 7 Applications&#8221;  Material de estudo:  Livros</p>
<ul>
<li>&#8220;Programing Windows Phone 7&#8243; (PDF grátis disponível) &#8211; <a target="_blank" href="http://www.charlespetzold.com/phone/">http://www.charlespetzold.com/phone/</a></li>
<li><a target="_blank" href="http://www.amazon.com/Beginning-Windows-Phone-Development-Professionals/dp/1430232161/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1301440684&amp;sr=1-1">Beginning Windows Phone 7 Development (Books for Professionals by Professionals)</a></li>
<li><a target="_blank" href="http://www.amazon.com/Professional-Windows-Phone-Application-Development/dp/0470891661/ref=sr_1_5?s=books&amp;ie=UTF8&amp;qid=1301440684&amp;sr=1-5">Professional Windows Phone 7 Application Development: Building Applications and Games Using Visual Studio, Silverlight, and XNA (Wrox Programmer to Programmer)</a></li>
</ul>
<p>Training Kits</p>
<ul>
<li><a target="_blank" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ca23285f-bab8-47fa-b364-11553e076a9a">Windows Phone 7 Training Kit for Developers &#8211; RTM</a></li>
</ul>
<p>O conteúdo da prova ainda não foi divulgado, entrei em contato com a microsoft e obtive a resposta que em até 2 semanas a página estará disponível pelo endereço <a target="_blank" href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-599&amp;locale=en-us">http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-599&amp;locale=en-us</a></p>
<p>[UPDATE] Página com conteúdo do exame já está disponível</p>
]]></content:encoded>
			<wfw:commentRss>http://andrepassos.net/2011/03/prova-beta-70-599-pro-designing-and-developing-windows-phone-7-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MVVM no Windows Phone 7 &#8211; Parte 1 (Commands)</title>
		<link>http://andrepassos.net/2011/03/mvvm-no-windows-phone-7-parte-1-commands/</link>
		<comments>http://andrepassos.net/2011/03/mvvm-no-windows-phone-7-parte-1-commands/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 19:40:44 +0000</pubDate>
		<dc:creator>André Passos</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[WP7]]></category>

		<guid isPermaLink="false">http://andrepassos.net/?p=37</guid>
		<description><![CDATA[O padrão MVVM (Model-View-ViewModel) é uma especialização do padrão Presenter porém utilizando capacidades específicas de Silverlight e WPF como data binding, command e behaviors. O MVVM é semelhante a muitos outros padrões que separam a camada de apresentação da camada de lógica, sendo assim toda a lógica de negócio pode ser programada para qualquer tipo [...]]]></description>
			<content:encoded><![CDATA[<p>O padrão MVVM (Model-View-ViewModel) é uma especialização do padrão Presenter porém utilizando capacidades específicas de Silverlight e WPF como data binding, command e behaviors. O MVVM é semelhante a muitos outros padrões que separam a camada de apresentação da camada de lógica, sendo assim toda a lógica de negócio pode ser programada para qualquer tipo de interface XAML.  Utilizando MVVM o código da sua view irá ficar totalmente limpo e muito mais fácil de dar manutenção. Sem utilizar MVVM o simples clique de um botão é definido da seguinte forma:</p>
<pre class="brush: xml; auto-links: false;">&lt;Button Click="Button_Click" /&gt;</pre>
<pre class="brush: csharp; auto-links: false;">private void Button_Click(object sender, RoutedEventArgs e)
        {

        }</pre>
<p>Mas qual o problema desta abordagem? Bom dou um bom exemplo: Você está desenvolvendo um sitema que tem um cliente Desktop WPF e um cliente móvel em WP7. Se os códigos estiverem todos nas views, terá que recodificar tudo em cada cliente. Com a utilização dos viewModels, você irá codificar esta ação uma única vez tanto para WPF quando para WP7. Deixando a teoria de lado, vamos por a mão na massa.  <span id="more-37"></span> Requisitos:</p>
<ul>
<li><a target="_blank" href="http://compositewpf.codeplex.com/" target="_blank">Prism</a> v4 para Windows Phone 7</li>
</ul>
<p>Crie um novo projeto utilizando o template <strong>Windows Phone Application</strong>, e coloque o nome de <em>CommandWP7</em>.  Com nosso projeto criado adicione um botão à MainPage.xaml  <a href="http://andrepassos.net/wp-content/uploads/2011/03/ScreenShot016.jpg"><img style="background-image: none; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border-width: 0px;" title="ScreenShot016" src="http://andrepassos.net/wp-content/uploads/2011/03/ScreenShot016_thumb.jpg" border="0" alt="ScreenShot016" width="244" height="442" align="left" /></a></p>
<pre class="brush: xml; auto-links: false;">&lt;!--ContentPanel - place additional content here--&gt;
        &lt;Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"&gt;
            &lt;Button Content="Botão com Command" HorizontalAlignment="Center" VerticalAlignment="Center"/&gt;
        &lt;/Grid&gt;</pre>
<p>No WP7 por enquanto não temos uma propriedade Command e CommandParameter como no silverlight e wpf, então teremos que utilizar um Behavior para nosso command funcionar.  Adicione a referência ao assembly System.Windows.Interactivity ao seu projeto e coloque no seu xaml o uso deste assembly</p>
<pre class="brush: xml;">xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"</pre>
<p>e modificaremos o código do nosso button para</p>
<pre class="brush: xml;">            &lt;Button Content="Botão com Command" HorizontalAlignment="Center" VerticalAlignment="Center"&gt;
                &lt;i:Interaction.Behaviors&gt;

                &lt;/i:Interaction.Behaviors&gt;
            &lt;/Button&gt;</pre>
<p>Agora teremos que criar o nosso ButtonCommand que será uma implementação de um beehavior que irá fazer o binding do nosso botão com o comando no ViewModel, adicione a referência ao assembly <strong>Microsoft.Practices.Prism</strong> e <strong>Microsoft.Practices.Prism.Interactivity, </strong>crie uma nova classe e dê o nome de ButtonCommand.</p>
<pre class="brush: csharp; auto-links: false;">    public class ButtonCommand : Behavior&lt;Button&gt;
    {
        public static readonly DependencyProperty CommandParameterBindingProperty =
            DependencyProperty.Register("CommandParameterBinding", typeof(Binding), typeof(ButtonCommand), new PropertyMetadata(HandleBindingChanged));

        public static readonly DependencyProperty CommandBindingProperty =
            DependencyProperty.Register("CommandBinding", typeof(Binding), typeof(ButtonCommand), new PropertyMetadata(HandleBindingChanged));

        private readonly BindingListener commandBindinglistener;
        private readonly BindingListener parameterBindinglistener;
        private ButtonClickCommandBinding binding;

        public ButtonCommand()
        {
            this.commandBindinglistener = new BindingListener(this.HandleCommandBindingValueChanged);
            this.parameterBindinglistener = new BindingListener(this.HandleCommandParameterBindingValueChanged);
        }

        public Binding CommandBinding
        {
            get { return (Binding)GetValue(CommandBindingProperty); }
            set { SetValue(CommandBindingProperty, value); }
        }

        public Binding CommandParameterBinding
        {
            get { return (Binding)GetValue(CommandParameterBindingProperty); }
            set { SetValue(CommandParameterBindingProperty, value); }
        }

        protected ICommand Command { get; set; }

        protected object CommandParameter { get; set; }

        protected override void OnAttached()
        {
            this.commandBindinglistener.Element = this.AssociatedObject;
            this.parameterBindinglistener.Element = this.AssociatedObject;
            this.CreateBinding();
            base.OnAttached();
        }

        protected override void OnDetaching()
        {
            this.commandBindinglistener.Element = null;
            this.parameterBindinglistener.Element = null;
            base.OnDetaching();
        }

        protected void OnBindingChanged(DependencyPropertyChangedEventArgs e)
        {
            if (e.Property == CommandBindingProperty)
            {
                this.commandBindinglistener.Binding = (Binding)e.NewValue;
            }

            if (e.Property == CommandParameterBindingProperty)
            {
                this.parameterBindinglistener.Binding = (Binding)e.NewValue;
            }

            this.CreateBinding();
        }

        private static void HandleBindingChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            ((ButtonCommand)sender).OnBindingChanged(e);
        }

        private void HandleCommandBindingValueChanged(object sender, BindingChangedEventArgs e)
        {
            this.CreateBinding();
        }

        private void HandleCommandParameterBindingValueChanged(object sender, BindingChangedEventArgs e)
        {
            this.CreateBinding();
        }

        private void CreateBinding()
        {
            if (this.commandBindinglistener.Value != null)
            {
                if (this.binding != null)
                {
                    this.binding.Detach();
                }

                this.binding = new ButtonClickCommandBinding(
                    this.AssociatedObject,
                    (ICommand)this.commandBindinglistener.Value,
                    () =&gt; this.parameterBindinglistener.Value);
            }
        }

        public class ButtonClickCommandBinding
        {
            private readonly ICommand command;
            private readonly Button button;
            private readonly Func&lt;object&gt; parameterGetter;

            public ButtonClickCommandBinding(Button button, ICommand command, Func&lt;object&gt; parameterGetter)
            {
                this.command = command;
                this.button = button;
                this.parameterGetter = parameterGetter;

                this.command.CanExecuteChanged += this.CommandCanExecuteChanged;
                this.button.Click += this.IconButtonClicked;
                this.button.IsEnabled = this.command.CanExecute(this.parameterGetter());
            }

            public void Detach()
            {
                this.button.Click -= this.IconButtonClicked;
                this.command.CanExecuteChanged -= this.CommandCanExecuteChanged;
            }

            private void IconButtonClicked(object s, EventArgs e)
            {
                this.command.Execute(this.parameterGetter());
            }

            private void CommandCanExecuteChanged(object s, EventArgs ea)
            {
                this.button.IsEnabled = this.command.CanExecute(this.parameterGetter());
            }
        }
    }</pre>
<p>Faça o build do projeto e volte ao nosso botão. Teremos que adicionar o namespace do projeto em nosso xaml</p>
<pre class="brush: xml;">xmlns:local="clr-namespace:CommandWp7"</pre>
<p>e então adicionar o nosso behavior de command ao nosso botão fazendo o binding para o comando no viewmodel.</p>
<pre class="brush: xml;">            &lt;Button Content="Botão com Command" HorizontalAlignment="Center" VerticalAlignment="Center"&gt;
                &lt;i:Interaction.Behaviors&gt;
                    &lt;local:ButtonCommand CommandBinding="{Binding ViewCommand}"/&gt;
                &lt;/i:Interaction.Behaviors&gt;
            &lt;/Button&gt;</pre>
<p>Para criar o ViewModel, crie uma nova classe  e coloque o nome de MainPageViewModel</p>
<pre class="brush: csharp;">public class MainPageViewModel
    {

        public DelegateCommand ViewCommand { get; set; }

        public MainPageViewModel()
        {
            this.ViewCommand = new DelegateCommand(ViewCommandInvoke);
        }

        public void ViewCommandInvoke()
        {
            MessageBox.Show("Comando executado com sucesso");
        }

    }</pre>
<p>e por último no MainPage.xaml.cs setamos o DataContext da view para o viewModel</p>
<pre class="brush: csharp;">    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
            this.DataContext = new MainPageViewModel();
        }
    }</pre>
<p>agora é só executar.  <a href="http://andrepassos.net/wp-content/uploads/2011/03/ScreenShot019.jpg"><img style="background-image: none; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border: 0px;" title="ScreenShot019" src="http://andrepassos.net/wp-content/uploads/2011/03/ScreenShot019_thumb.jpg" border="0" alt="ScreenShot019" width="274" height="465" align="left" /></a> <a href="http://andrepassos.net/wp-content/uploads/2011/03/ScreenShot018.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="ScreenShot018" src="http://andrepassos.net/wp-content/uploads/2011/03/ScreenShot018_thumb.jpg" border="0" alt="ScreenShot018" width="278" height="468" /></a> O codigo fonte pode ser baixado <a href="http://andrepassos.net/wp-content/uploads/2011/02/CommandWp7.zip">aqui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://andrepassos.net/2011/03/mvvm-no-windows-phone-7-parte-1-commands/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilizando ChildWindows de forma s&#237;ncrona</title>
		<link>http://andrepassos.net/2011/03/utilizando-childwindows-de-forma-sincrona/</link>
		<comments>http://andrepassos.net/2011/03/utilizando-childwindows-de-forma-sincrona/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 17:13:23 +0000</pubDate>
		<dc:creator>André Passos</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Async CTP]]></category>
		<category><![CDATA[silverlight]]></category>

		<guid isPermaLink="false">http://andrepassos.net/?p=39</guid>
		<description><![CDATA[Um problema que me deparo constantemente é a necessidade de abrir um ChildWindow qualquer e continuar a execução do código a partir do retorno deste. Claro que é possível fazer isto utilizando Actions e eventos, mas não seria muito melhor que trabalhasse de forma semelhante ao MessageBox do WinForms? Antes de começar é necessário instalar [...]]]></description>
			<content:encoded><![CDATA[<p>Um problema que me deparo constantemente é a necessidade de abrir um ChildWindow qualquer e continuar a execução do código a partir do retorno deste. Claro que é possível fazer isto utilizando Actions e eventos, mas não seria muito melhor que trabalhasse de forma semelhante ao MessageBox do WinForms?</p>
<p>Antes de começar é necessário instalar o <a target="_blank" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=18712f38-fcd2-4e9f-9028-8373dc5732b2">Visual Studio Async CTP</a> pois ele nos da a possibilidade de trabalhar de forma Assíncrona/Síncrona.</p>
<p>Primeiro criaremos um novo projeto com o template <strong>Silverlight Application</strong>. Dentro do projeto crie um novo item utilizando o template <strong>ChildWindow</strong>, e de-lhe o nome de ChildWindowSync.</p>
<p>Criaremos então um método estático que será responsável por mostrar a nossa window conforme o código abaixo:</p>
<pre class="brush: csharp; auto-links: false;">        public static Task&lt;bool&gt; ShowSync()
        {
            var tcs = new TaskCompletionSource&lt;bool&gt;();
            var window = new ChildWindowSync();
            window.Closed += (sender, e) =&gt; {
                tcs.TrySetResult(window.DialogResult.Value);
            };
            window.Show();
            return tcs.Task;
        }</pre>
<p>Veja que é bastante simples, criamos um objeto TaskCompletionSource que será a task retornada quando nossa window for fechada, após este passo a janela é criada e adicionamos um eventHandler ao evento de closed. Dentro deste handler setamos o dialogResult que foi definido pelos métodos de button click do Ok e Cancel;</p>
<p>Neste momento seu código deve estar parecido com o abaixo:</p>
<pre class="brush: csharp; auto-links: false;">    public partial class ChildWindowSync : ChildWindow
    {
        public ChildWindowSync()
        {
            InitializeComponent();
        }

        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
        }

        public static Task&lt;bool&gt; ShowSync()
        {
            var tcs = new TaskCompletionSource&lt;bool&gt;();
            var window = new ChildWindowSync();
            window.Closed += (sender, e) =&gt; {
                tcs.TrySetResult(window.DialogResult.Value);
            };
            window.Show();
            return tcs.Task;
        }
    }</pre>
<p>Agora criaremos um botão na MainPage.xaml que irá chamar nossa ChildWindowSync.</p>
<pre class="brush: xml; auto-links: false;">&lt;UserControl x:Class="SilverlightApplication2.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400"&gt;

    &lt;Grid x:Name="LayoutRoot" Background="White"&gt;
        &lt;Button x:Name="testebtn" Content="Open window" Click="testebtn_Click"
                VerticalAlignment="Center" HorizontalAlignment="Center"/&gt;
    &lt;/Grid&gt;
&lt;/UserControl&gt;</pre>
<p>O async ctp exige que seja utilizado a palavra reservada &#8220;async&#8221; nos métodos que utilizam chamadas assíncronas em seu corpo. No caso a assinatura do método testbtn_Click fica da seguinte forma:</p>
<pre class="brush: csharp; auto-links: false;">private async void testebtn_Click(object sender, RoutedEventArgs e)</pre>
<p>então colocamos o corpo do nosso método para esperar ate que a childWindow seja fechada e retornar se o DialogResult foi True ou False</p>
<pre class="brush: csharp; auto-links: false;">private async void testebtn_Click(object sender, RoutedEventArgs e)
        {
            bool teste = await ChildWindowSync.ShowSync();
            if (teste)
            {
                MessageBox.Show("Você Clicou em Ok!");
            }
            else
            {
                MessageBox.Show("Você clicou em Cancel!");
            }
        }</pre>
<p>Rode a aplicação e veja o resultado. Você verá que ao clicar no nosso botão de teste a child window é exibida e o resultado é exibido somente depois da janela ter um resultado: true se for clicado em Ok e False se for clicado em Cancel ou fechar a janela pelo X.</p>
<p>O código fonte deste exemplo pode ser baixado <a href="http://andrepassos.net/wp-content/uploads/2011/03/ChildWindowSync.zip">aqui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://andrepassos.net/2011/03/utilizando-childwindows-de-forma-sincrona/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MCTS: 70-506 Silverlight 4 Development&#8211;Aprovado</title>
		<link>http://andrepassos.net/2011/01/mcts-70-506-silverlight-4-developmentaprovado/</link>
		<comments>http://andrepassos.net/2011/01/mcts-70-506-silverlight-4-developmentaprovado/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 11:37:12 +0000</pubDate>
		<dc:creator>André Passos</dc:creator>
				<category><![CDATA[Certificação]]></category>
		<category><![CDATA[70-506]]></category>
		<category><![CDATA[certificação]]></category>
		<category><![CDATA[mcts]]></category>

		<guid isPermaLink="false">http://andrepassos.net/2011/01/mcts-70-506-silverlight-4-developmentaprovado/</guid>
		<description><![CDATA[2011 começa com boas notícias! Após muito tempo sem postar nada, venho compartilhar minha alegria ao ser aprovado com a pontuação de 900/1000 na minha primeira certificação microsoft. A prova achei um pouco mais difícil que a prova beta, mas nada muito complicado, qualquer pessoa que utilize silverlight no dia a dia consegue ser aprovado. [...]]]></description>
			<content:encoded><![CDATA[<p>2011 começa com boas notícias! Após muito tempo sem postar nada, venho compartilhar minha alegria ao ser aprovado com a pontuação de 900/1000 na minha primeira certificação microsoft.</p>
<p>A prova achei um pouco mais difícil que a prova beta, mas nada muito complicado, qualquer pessoa que utilize silverlight no dia a dia consegue ser aprovado.</p>
<p>Sobre as questões vi muita coisa sobre layout e perguntas específicas de controles básicos como TextBox, ComboBox e Grid, eventos e eventos roteados, muito pouco sobre Binding e Command além de 2 questões sobre ClientAccessPolice e mais umas duas sobre WCF. </p>
<p>No geral a prova ficou bem dividida e abordando todos os assuntos divulgados no <a target="_blank" href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-506" target="_blank">site</a> do exame.</p>
<p>Quem estiver interessado em estudar para esta prova, é uma leitura quase que obrigatória o livro “<a target="_blank" href="http://apress.com/book/view/1430229799" target="_blank">Pro Silverlight 4</a>” da Apress.</p>
<p>Próxima prova… 70-516!</p>
]]></content:encoded>
			<wfw:commentRss>http://andrepassos.net/2011/01/mcts-70-506-silverlight-4-developmentaprovado/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Entity Framework 4 &#8211; POCO Code Only</title>
		<link>http://andrepassos.net/2010/09/entity-framework-4-poco-code-only/</link>
		<comments>http://andrepassos.net/2010/09/entity-framework-4-poco-code-only/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 18:07:01 +0000</pubDate>
		<dc:creator>André Passos</dc:creator>
				<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[Ef4]]></category>
		<category><![CDATA[POCO]]></category>

		<guid isPermaLink="false">http://andrepassos.net/?p=26</guid>
		<description><![CDATA[Na versão “beta” deste blog, fiz um post mostrando como utilizar o POCO (Plain Old CLR Object) e as novas funcionalidades disponíveis no Feature CTP 4 para ADO.Net Entity Framework. Porém resolvi reescrever o post para explicar melhor cada funcionalidade e ir aprofundando a cada post. Antes de começar faça o download do CTP 4. [...]]]></description>
			<content:encoded><![CDATA[<p>Na versão “beta” deste blog, fiz um post mostrando como utilizar o POCO (Plain Old CLR Object) e as novas funcionalidades disponíveis no Feature CTP 4 para ADO.Net Entity Framework. Porém resolvi reescrever o post para explicar melhor cada funcionalidade e ir aprofundando a cada post.</p>
<p>Antes de começar faça o <a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4e094902-aeff-4ee2-a12d-5881d4b0dd3e&amp;displaylang=en" target="_blank">download</a> do CTP 4.</p>
<ul>
<li>Abra o Visual Studio 2010</li>
<li>File –&gt; New –&gt; New Project</li>
<li>Selecione “Windows” no menu à esquerda e depois “Console Application”</li>
<li>Digite <strong>PocoEF4</strong> como nome do projeto</li>
</ul>
<p>Com a nossa solução criada, criaremos mais dois projetos para o domínio e a persistência.</p>
<ol>
<li>Com o botão direito do mouse clique em Add –&gt; New Project</li>
<li>Selecione “Class Library”</li>
<li>Digite <strong>Dominio </strong>no nome do projeto.</li>
<li>Repita os passos 1 e 2 e coloque o nome do projeto como <strong>Persistencia</strong></li>
</ol>
<p>Após adicionar os projetos sua solução deve parecer como na imagem abaixo:</p>
<p><a href="http://andrepassos.net/wp-content/uploads/2010/09/ScreenShot001.jpg"><img style="display: inline; border-width: 0px;" title="ScreenShot001" src="http://andrepassos.net/wp-content/uploads/2010/09/ScreenShot001_thumb.jpg" border="0" alt="ScreenShot001" width="244" height="86" /></a></p>
<p>Vamos então criar o nosso domínio com as classes POCO. No projeto domínio crie duas classes com os nomes <strong>Blog</strong> e <strong>Post </strong>conforme o código abaixo</p>
<pre class="brush: csharp; auto-links: false;">public class Blog
{
    public virtual Guid ID { get; set; }
    public virtual string BlogName { get; set; }
    private IList&lt;post&gt; _Posts = new List&lt;post&gt;(); 

    public virtual IList&lt;post&gt; Posts
    {
        get { return _Posts; }
        set { _Posts = value; }
    }
}</pre>
<pre class="brush: csharp; auto-links: false;">public class Post
{
    public virtual Guid ID { get; set; }
    public virtual Blog Blog { get; set; }
    public virtual string PostTitle { get; set; }
}</pre>
<p>Para começar a utilizar o CTP 4 adicione a referência ao assembly <strong>Microsoft.Data.Entity.Ctp</strong> na tab .Net e adicione também o assembly <strong>System.Data.Entity</strong>.</p>
<p>Criado o domínio, temos que criar agora o contexto de dados. Crie uma classe no projeto Persistencia com o nome <strong>BlogContext</strong> conforme o código abaixo</p>
<pre class="brush: csharp; auto-links: false;">using System.Data.Entity;

public class BlogContext : DbContext
{
    public BlogContext() : base(ConfigurationManager.ConnectionStrings["BlogConnection"].ConnectionString)
    {
    }
    public DbSet&lt;Blog&gt; Blogs { get; set; }
    public DbSet&lt;Post&gt;
 Posts { get; set; }
}</pre>
<p>Por último configure a conexão com o banco de dados, segue um exemplo abaixo</p>
<pre class="brush: xml; auto-links: false;">&lt;configuration&gt;
  &lt;connectionStrings&gt;
    &lt;add name="BlogConnection" connectionString ="Data Source=.\;Initial Catalog=Blog;Integrated Security=SSPI;" providerName ="System.Data.SqlClient.SqlConnection"/&gt;
  &lt;/connectionStrings&gt;
&lt;/configuration&gt;</pre>
<p>Acessando os dados</p>
<pre class="brush: csharp; auto-links: false;">class Program
{
    static void Main(string[] args)
    {
        using (var context = new BlogContext())
        {
            var blog = new Blog { ID = Guid.NewGuid(), BlogName = "AndrePassos.net" };
            context.Blogs.Add(blog);
            int rows = context.SaveChanges();

            Console.WriteLine("{0} entidades atualizadas no banco de dados", rows);
            Console.ReadKey();
        }
    }
}</pre>
<p>Agora já podemos rodar o programa e verificar que um novo blog foi adicionado.</p>
<p>No próximo post irei explicar mais detalhadamente sobre o DbContext e o ModelDiscovery. Até a próxima</p>
]]></content:encoded>
			<wfw:commentRss>http://andrepassos.net/2010/09/entity-framework-4-poco-code-only/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ScrumTable (TFS, Scrum e Surface)</title>
		<link>http://andrepassos.net/2010/09/scrumtable-tfs-scrum-e-surface/</link>
		<comments>http://andrepassos.net/2010/09/scrumtable-tfs-scrum-e-surface/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 17:29:32 +0000</pubDate>
		<dc:creator>André Passos</dc:creator>
				<category><![CDATA[Scrum]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[ScrumTable]]></category>
		<category><![CDATA[Surface]]></category>
		<category><![CDATA[TFS]]></category>

		<guid isPermaLink="false">http://andrepassos.net/?p=13</guid>
		<description><![CDATA[Esta semana visitando alguns blogs na internet me deparei com este incrível video mostrando a força do SCRUM na plataforma Microsoft. Recentemente foi lançado o Visual Studio Scrum 1.0, é um template para ser usado no Team Foundation Server 2010 que aplica todas as diretrizes do SCRUM na visão do seu projeto. No final de [...]]]></description>
			<content:encoded><![CDATA[<p>Esta semana visitando alguns blogs na internet me deparei com este incrível video mostrando a força do SCRUM na plataforma Microsoft. Recentemente foi lançado o <a target="_blank" href="http://visualstudiogallery.msdn.microsoft.com/en-us/59ac03e3-df99-4776-be39-1917cbfc5d8eXnd8BSHYR6g" target="_blank">Visual Studio Scrum 1.0</a>, é um template para ser usado no Team Foundation Server 2010 que aplica todas as diretrizes do SCRUM na visão do seu projeto.</p>
<p>No final de junho 3 estudantes (Patrick Boos, Michael Gfeller e Silvan Gehrig) apresentaram seu projeto de bacharelado esta incível ferramenta utilizando o TFS, Scrum e <a target="_blank" href="http://www.microsoft.com/surface" target="_blank">Microsoft Surface</a>. Foram utilizadas as tecnologias:</p>
<ul>
<li>C# e WPF</li>
<li>Microsoft Surface SDK 1.0</li>
<li>Team Foundation Server 2010</li>
<li>Scrum</li>
</ul>
<p>Veja o vídeo abaixo:</p>
<div id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:06f3b7a1-e613-4a37-8540-c9288b690849" class="wlWriterEditableSmartContent" style="margin: 0px; display: inline; float: none; padding: 0px;">
<div><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/FvGs3PJu5Iw&amp;hl=en" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://www.youtube.com/v/FvGs3PJu5Iw&amp;hl=en"></embed></object></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://andrepassos.net/2010/09/scrumtable-tfs-scrum-e-surface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

