RIA services exposing & consuming queries
-
Upload
iedotnetug -
Category
Technology
-
view
4.425 -
download
0
description
Transcript of RIA services exposing & consuming queries
![Page 1: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/1.jpg)
Week 7 – WCF RIA Services
Overview
Jim LaVinejim.lavine @gmail.com
![Page 2: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/2.jpg)
Remaining Schedule• 1-8 Exposing and consuming querying services• 1/15 Updating data• 1/22 Business Logic and validation
![Page 3: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/3.jpg)
Agenda• Domain query rules• The DomainContext Class• Asynchronous loading• Client-side data caching• Shaping data in the client• Retrieving object hierarchies• A peak under the hood
![Page 4: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/4.jpg)
Domain Service
Design-time workflow
Domain Service
Data model
MetadataEntityMetadataEntity
MetadataEntity
DAL
L2S EF REST/SOAP POCO
Server project
CRUD
Custom logic
Client project
Domain Context
MetadataEntity proxy typeMetadataEntity proxy type
MetadataEntity proxy type
UI Views
Entity Container
Load
Invoke
Build
1
2
4
3
Bindable
![Page 5: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/5.jpg)
Domain query operation rules [EnableClientAccess()] public class ChinookDomainService : LinqToEntitiesDomainService<ChinookEntities> { public IEnumerable<Invoice> GetInvoiceByCustomer(int customerId) { return ObjectContext.Invoices.Where(c => c.CustomerId == customerId); }
public Customer GetCustomerById(int customerId) { return ObjectContext.Customers.Where(c => c.CustomerId == customerId); } }
public
IEnumerableIQueryable
<T>
Entity
Supportedtypes
public IEnumerable<Customers> GetCustomersByJoinData(DateTime mindate, DateTime maxdate)
{ return ObjectContext.Customers.Where(c => c.JoinDate >= mindate &&
c.JoinDate <= maxdate); }
NoOverloads
![Page 6: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/6.jpg)
public class Customers { [Key] public int CustomerId { get; set; } public string FName { get; set; } . . . }
Domain query operation rules
Identity
![Page 7: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/7.jpg)
Convention vs. configuration• Query operation explicit marking : QueryAttribute• Signature match : returns IQueryable<T>, IEnumerable<T>, T• QueryAttribute parameters
– IsComposable– ResultLimit– HasSideEffects
[Query] public Iqueryable<Customers> GetCustomersByState (BillingState state) { . . . }
public Iqueryable<Customers> GetCustomersByState (BillingState state) { . . . } [Query (IsComposable=false)] public SalesPerson GrabTopSalesperson (int year) { . . . }
![Page 8: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/8.jpg)
Demo• Defining domain queries
![Page 9: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/9.jpg)
Code generation
l
Server assemblies Silverlight Client
Entity type
Custom Attribute
Silverlight client
Entity type
Entity type
Metadata class
Entity proxy
Custom Attribute
DomainContext types
Query factory methods
Entity proxy
Entity proxy
Namespace
Class name
Public props
InotifyPropertyChangedValidationMetadata
NamespaceDomainService types[EnableClientAccess]
Public methods
![Page 10: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/10.jpg)
The typed DomainContext class
• Constructors• Query proxy methods• Entity proxy properties• Entity container factory
![Page 11: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/11.jpg)
Demo• Examining generated classes
![Page 12: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/12.jpg)
Asynchronous loading
ChinookDomainContext ctx = new ChinookDomainContext();
var query = ctx.GetInvoicesByCustomer (1) ; LoadOperation<Invoice> op = ctx.Load(query);
CustomerGrid.ItemsSource = op.Entities
EntityQuery<Invoice>
LoadOperation<Invoice>
IEnumerable<Invoice>
![Page 13: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/13.jpg)
The Load methodLoad method overloads• Load(EntityQuery<TEntity>)• Load(EntityQuery<TEntity>, LoadBehavior, Callback, UserState)• Load(EntityQuery<TEntity>, Callback, UserState)• Load(EntityQuery<TEntity>, ThrowOnError)• Load(EntityQuery<TEntity>, LoadBehavior, ThrowOnError)
LoadOperation<Invoice> op = ctx.Load<Invoice>(query,lo => { /* Check for errors, bind to UI, do work */},null);
ctx.Load<Invoice>(query).Completed += new EventHandler(LoadComplete);
void LoadComplete(object sender, EventArgs e){/* Check for errors, bind to UI, do work */ }
![Page 14: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/14.jpg)
LoadOperation
Load Operation: AllEntities Entities EntityQuery TotalEntityCount
OperationBase: INotifyPropertyChanged IsComplete, Completed,
event Cancel(), CanCancel,
IsCanceled Error, HasError
![Page 15: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/15.jpg)
Demo• Loading data
![Page 16: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/16.jpg)
Caching query results
DomainContext
DomainService
EntityContainer
EntitySet Entity
Set EntitySet
EntityEntity
Entity
Change trackingValidationData bindingUpdating
Sendquery
QueryResults
QueryResults
INotifyPropertyChanged
EntitySetpropertyLoad()
![Page 17: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/17.jpg)
Demo• Binding to cached data
![Page 18: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/18.jpg)
Load options
Entity Container
EntitySet
Changes (local)Changes (remote)
?
LoadBehavior:
-KeepCurrent-MergeIntoCurrent-RefreshCurrent
Load()
![Page 19: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/19.jpg)
Demo• Using LoadBehavior
![Page 20: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/20.jpg)
Client side data shaping
EntityQuery<T>e.g. GetProductsQuery()
QueryNameParametersQueryIsComposable
LINQ operators(Where, Skip,Take, OrderBy)
EntityQueryable(extension)
DomainService
Client
Server
Server query +Client-side querycombined
LINQ operators(Where, Skip,Take, OrderBy)
![Page 21: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/21.jpg)
Demo• Filtering data
![Page 22: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/22.jpg)
Retrieving object hierarchies
Server
Server-sideEntity type
[IncludeAttribute]
MetadataClass
Domain ServiceIQuerable<foo>
GetFoos()
Include
foo1
Client
EntityContainer
foo1 [Association]new props
![Page 23: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/23.jpg)
Demo• Returning related data
![Page 24: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/24.jpg)
A look behind the scenes
DomainContext
DomainService
WebDomain Client
BeginQuery()
WCF Channel Factory
WCF Client Channel
WCF ServiceContract DomainServic
eHttpModule
Virtual.SVC file<%@ServiceHost
Service=“XYZService Factory=“System.Web.Ria.
DomainServiceHostFactory”%>
WCF ServiceContract
DomainService
HostFactory
DomainServiceHost
Operation Description
QueryResult<T>
REST/binary endpoint
![Page 25: RIA services exposing & consuming queries](https://reader033.fdocuments.in/reader033/viewer/2022061209/548c4773b47959e70c8b6365/html5/thumbnails/25.jpg)
Summary
• Integrated Infrastructure• Signature-based conventions• Metadata-specific object heirarchies• Simplified asynchronous calls• Client-side data caching• Integrateing data shaping• REST-based default configuration