This document outlines the agenda for the 10th in-person meeting of the Portuguese SharePoint Community on April 16, 2011. The agenda includes an opening, presentations on LINQ to SharePoint by Andr辿 Vala and a panel discussion, and concludes with a final meeting and lunch. The presentations will cover what LINQ and LINQ to SharePoint are, developing with LINQ to SharePoint, common pitfalls, performance considerations, and usage scenarios. There will also be live demos throughout the presentations.
3. Agenda09:30 Recep巽達o10:00 Abertura10:30 Linq to SharePoint com Andr辿 Vala 11:30 Coffee-break 11:45 Painel de Discuss達o 13:00 Final da Reuni達o & Almo巽o
5. LINQ to SharePointLINQ?LINQ to SharePoint?Desenvolvimento com LINQCommon PitfallsPerformanceCen叩rios de usoDEMODEMODEMODEMODEMO
6. LINQ?LINQ = Language Integrated QueryLINQ to SQLLINQ to ObjectsLINQ to XMLLINQ to ?DadosAPP.NETQueryLINQ Provider.NETDados
7. LINQ Data ContextPonto de entrada para o LINQPermite obter e actualizar informa巽達o na fonte de dadosTraduz queries sobre objectos em queries na linguage nativa da fonte de dados, e constr坦i objectos a partir dos resultados provenientes da fonte de dadosDadosAPP.NETQueryLINQ ProviderData Context.NETDados
8. LINQ to SQLusing System.Data.Linq;DataContext db = new DataContext(@mydatabase.mdf);Table<BankAccount> BankAccounts = db.GetTable<BankAccount>();var query =from account in BankAccountswhere account.Bank == Millennium BCPselect account;foreach (BankAccount account in query){Console.WriteLine(Number: {0}, account.Number);}
9. LINQ to SharePoint?Utiliza um LINQ to SharePoint providerMicrosoft.SharePoint.Linq.dllTransforma .NET em CAMLTransforma List Items em .NETSharePointAPP.NETCAMLLINQ to SharePoint.NETList Items
10. LINQ to SharePointusing Microsoft.SharePoint.Linq;DataContext data = new DataContext(SPContext.Current.Web.Url);EntityList<BankAccount> BankAccounts = data.GetList<BankAccount>(BankAccounts);var query =from account in BankAccountswhere account.Bank == Millennium BCPselect account;foreach (BankAccount account in query){Console.WriteLine(Number: {0}, account.Number);}
14. Entidades Defini巽達o Manual[ContentType(Name=BankAccount, Id=0x0104)]publicpartialclass BankAccount{[Column(Name=Number, FieldType=Text)]publicstring Number { get; set; } [Column(Name=Bank, FieldType=Text)]publicstring Bank { get; set; }}
15. Entidades Gera巽達o Autom叩ticaSPMetalFerramenta para gerar as entidades para um conjunto de content types / listasOnde est叩?C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BINComo se usa?SPMetal /web:http://createbox/code:BankAccounts.cs/namespace:MyApp.SharePoint.Data
16. Adicionar Itensusing Microsoft.SharePoint.Linq;DataContext data = new DataContext(SPContext.Current.Web.Url);BankAccount account = new BankAccount(){Number = 99100048169,Bank = Millennium BCP};data.BankAccounts.InsertOnSubmit(account);data.SubmitChanges();
17. Eliminar Itensusing Microsoft.SharePoint.Linq;DataContext data = new DataContext(SPContext.Current.Web.Url);foreach (BankAccount account in data.BankAccounts){if (account.Bank == Millennium BCP) data.BankAccounts.DeleteOnSubmit(account);}data.SubmitChanges();
18. Reciclar Itensusing Microsoft.SharePoint.Linq;DataContext data = new DataContext(SPContext.Current.Web.Url);foreach (BankAccount account in data.BankAccounts){if (account.Bank == Millennium BCP) data.BankAccounts.RecycleOnSubmit(account);}data.SubmitChanges();
19. Actualizar Itensusing Microsoft.SharePoint.Linq;DataContext data = new DataContext(SPContext.Current.Web.Url);foreach (BankAccount account in data.BankAccounts){if (account.Bank == Millennium BCP) account.Bank = BES;}data.SubmitChanges();
23. Pitfall To Dispose or Not to Dispose1DataContext data = new DataContext(http://createbox);Dispose? SIMDataContext data = new DataContext(SPContext.Current.Web.Url);Dispose? NOstring webUrl = SPContext.Current.Web.Site.RootWeb.Url;DataContext data = new DataContext(webUrl);Dispose? SIM23
24. Pitfall To Dispose or Not to Dispose1using (DataContext data = new DataContext(http://createbox)){ (...)}DataContext data = new DataContext(SPContext.Current.Web.Url);(...)string webUrl = SPContext.Current.Web.Site.RootWeb.Url;using (DataContext data = new DataContext(webUrl)){ (...)}23
25. Pitfall Acesso An坦nimoLINQ to SharePoint n達o suporta acesso an坦nimoH叩 um workaround mas tem desvantagens:Grande impacto no desempenhoUtiliza RunWithElevatedPrivilegesSolu巽達o: regressar ao CAML...
27. Pitfall Display NamesSPMetal utiliza o Display Name das colunas para gerar os membros das classesO que acontece quando os nomes das colunas t棚m caracteres especiais? POIS...E como 辿 que isso se resolve?...
30. Performance Object Tracking Enabled Permite optimizar o desempenho em acessos read-only...DataContext data = new DataContext(SPContext.Current.Web.Url);data.ObjectTrackingEnabled = false;
31. Performance LINQ vs CAMLA tradu巽達o LINQ para CAML 辿 feita em tempo realExiste uma penaliza巽達o no desempenhoA query gerada pode ser ineficienteNem todas opera巽探es definidas em LINQ s達o suportadas em CAML...
33. Cen叩rios de UsoMuito simples de usar mas n達o 辿 a solu巽達o quando...C坦digo tem que correr no clienteA solu巽達o tem que suportar acesso an坦nimoO desempenho 辿 cr鱈ticoExistem colunas lookup que se referem a listas noutros sites da mesma site collection
34. Refer棚nciasMSDN: Using LINQ to SharePointhttp://msdn.microsoft.com/en-us/library/ee535491.aspxV鱈deos no Channel 9http://channel9.msdn.com/Learn/Courses/SharePoint2010Developer/LINQtoSharePointUnit