Microsoft .NET RIA Services CTP July 2009 : Algumas mudanças com o Silverlight 3 final
Olá pessoal, tudo certo?
Depois de alguns testes com o novo CTP de Julho do .NET RIA Services e a versão final do Silverlight 3.0, notei algumas mudanças e comentários aqui são necessários.
Nesses posts abaixo, você tinha alguns exemplos com o .NET RIA Services CTP de Maio 2009 e Silverlight 3.0 ainda Beta, lembra deles?
Mais recursos do .NET RIA Services CTP Maio 2009
Ref.: https://blogs.msdn.com/wcamb/archive/2009/06/26/mais-recursos-do-net-ria-services-ctp-maio-2009.aspx
HelloWorld com o .NET RIA Services
Ref.: https://blogs.msdn.com/wcamb/archive/2009/06/24/helloworld-com-o-net-ria-services.aspx
As dlls a seguir foram mantidas no SDK do Silverlight:
- System.Windows.Controls.dll
- System.Windows.Controls.Data.dll
- System.Windows.Ria.Controls.dll
Porém, a System.Windows.Controls.Data.DataForm.dll, que era usada para a adição de controles dataControls (como o DataPager) foi movida do Silverlight SDK para o Silverlight Toolkit.
Microsoft® Silverlight™ 3 Tools for Visual Studio 2008 SP1
Ref.: https://www.microsoft.com/downloads/details.aspx?familyid=9442b0f2-7465-417a-88f3-5e7b5409e9dd&displaylang=en
Silverlight Toolkit - July 2009
Ref.: https://silverlight.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24246
Se você não havia encontrado o Data.DataForm a partir da versão final do SL3, essa era a razão. Uma lista completa de quebras e mudanças do SL2 para o SL3 é encontrada no link abaixo:
Ensuring That Your Silverlight 2 Applications Work with Silverlight 3
Ref.: https://msdn.microsoft.com/en-us/library/cc645049(VS.95).aspx
O .NET RIA Services também mudou e a partir da documentação, o primeiro exemplo é dado usando o Entity Framework para a geração do DomainContext, exportando as entidades mapeadas para o cliente Ria.
Algumas pessoas também me perguntaram sobre o DomainContext gerado pela classe proxy no lado cliente. Quando tentaram fazer o binding dos dados no controle DataGrid, por exemplo, tiveram dificuldade para encontrar o DomainContext ou mesmo fazer a associação do DataSource no controle.
Para isso, vale destacar a localização do DomainContext. Sempre que a documentação citá-lo, ele está criado no arquivo da pasta Generetad_Code, por exemplo, o arquivo “SilverlightApplication1.Web.g.cs”. Veja a figura abaixo, onde destaco o DomainContext criado:
O nome é que não ajuda :( quando você criar a classe DomainService, ela empresta o nome para o DomainContext no proxy cliente. Isso pode gerar a confusão!
A partir desse DomainContext, que no meu exemplo foi gerado a partir do EDMX do Entity Framework no lado servidor, podemos usar o seguinte mapa para binding de dados.
Arquivo no lado do cliente: MainPage.xaml
1: <UserControl x:Class="SilverlightApplication1.MainPage"
2: xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
3: xmlns:dataControls="clr-namespace:System.Windows.Controls.Data;assembly=System.Windows.Controls.Data.DataForm"
4: xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
5: xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
6: xmlns:d="https://schemas.microsoft.com/expression/blend/2008"
7: xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006"
8: mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
9: <Grid x:Name="LayoutRoot">
10: <data:DataGrid Name="TheDataGrid"></data:DataGrid>
11: </Grid>
12: </UserControl>
Arquivo no lado do cliente: MainPage.xaml.cs
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Net;
5: using System.Windows;
6: using System.Windows.Controls;
7: using System.Windows.Documents;
8: using System.Windows.Input;
9: using System.Windows.Media;
10: using System.Windows.Media.Animation;
11: using System.Windows.Shapes;
12:
13: // Adicionar novos namespaces
14: using SilverlightApplication1.Web;
15: using System.Windows.Ria.Data;
16:
17: namespace SilverlightApplication1
18: {
19: public partial class MainPage : UserControl
20: {
21: // Adicionar o contexto do DomainServices1
22: private DomainService1 _ctxt = new DomainService1();
23:
24: public MainPage()
25: {
26: InitializeComponent();
27:
28: // Carregar as entidades deseajdas.
29: LoadOperation<Contacts> loadOp = this._ctxt.Load(this._ctxt.GetContactsQuery());
30:
31: this.TheDataGrid.ItemsSource = loadOp.Entities;
32: }
33: }
34: }
No código acima, note o trecho onde fazemos o binding para o DataGrid colocado na página .XAML, veja:
O que eu fiz foi carregar os dados da entidade Contacts, que foi exportada pelo contexto, a partir do EDMX gerado para meu banco de dados. Para isso, usei o método GetContactsQuery() do contexto gerado. Para as outras entidades, também tenho os métodos de consulta, como GetAccountsQuery(), GetBusinessCustomersQuery(), GetCustomersQuery(), etc.
Recomendo a leitura e testes sobre os exemplos com o novo .NET RIA Services CTP de Julho. Ele parece mais simples e aos poucos, esse framework vai ganhando os contornos de uma boa solução para o middle tier de uma solução RIA.
Microsoft .NET RIA Services July 2009 Preview
https://www.microsoft.com/downloads/details.aspx?FamilyID=76bb3a07-3846-4564-b0c3-27972bcaabce&displaylang=en#filelist
Por enquanto é só! Até o próximo post :)
Waldemir.