En un post anterior hablaba sobre RIA Services y empecé con un ejemplo sencillo de cómo crear una aplicación con RIA Services.
En este post toca explicar en más detalles algunas de las cosas que vimos en ese post anterior.
Al crear el DomainService aparecía un diálogo como este:
Si una vez generado el DomainService, vamos al fichero SuppliersService.cs veremos que el código que se ha generado es el siguiente:
[EnableClientAccess()] public class SuppliersService : LinqToEntitiesDomainService<NorthwindEntities> { public IQueryable<Suppliers> GetSuppliers() { return this.Context.Suppliers; } public void InsertSuppliers(Suppliers suppliers) { this.Context.AddToSuppliers(suppliers); } public void UpdateSuppliers(Suppliers currentSuppliers, Suppliers originalSuppliers) { this.Context.AttachAsModified(currentSuppliers, originalSuppliers); } public void DeleteSuppliers(Suppliers suppliers) { if ((suppliers.EntityState == EntityState.Detached)) { this.Context.Attach(suppliers); } this.Context.DeleteObject(suppliers); } }
public IQueryable<Suppliers> GetSuppliers(string city) { return (from c in this.Context.Suppliers where c.City == city select c); }
SuppliersContext context = new SuppliersContext(); gridRiaDemo.ItemsSource = context.Suppliers; context.LoadSuppliers("London");
En esta solución hemos modificado el servidor, para que exponga un método con el parámetro por el que queremos filtrar, pero sin cambiar el método GetSuppliers, sin añadir el parámetro, también podríamos usar una sobrecarga que se genera en el proxy cliente para obtener el mismo resultado:
Esto es posible porque al generarse el proxy en el cliente no se genera única y exclusivamente el método que exponemos. Por cada método se crean tres sobrecargas distintas en el cliente, que nos permiten cosas como las que acabamos de ver.
Si vemos el código generado veremos lo siguiente:
#region LoadSuppliers method overloads /// <summary> /// Invokes the server-side method 'GetSuppliers' and loads the result into <see cref="Suppliers"/>. /// </summary> [LoadMethod(typeof(Suppliers))] public void LoadSuppliers() { this.LoadSuppliers(null, MergeOption.KeepCurrentValues, null); } /// <summary> /// Invokes the server-side method 'GetSuppliers' and loads the result into <see cref="Suppliers"/>. /// </summary> [LoadMethod(typeof(Suppliers))] public void LoadSuppliers(IQueryable<Suppliers> query, object userState) { this.LoadSuppliers(query, MergeOption.KeepCurrentValues, userState); } /// <summary> /// Invokes the server-side method 'GetSuppliers' and loads the result into <see cref="Suppliers"/>. /// </summary> [LoadMethod(typeof(Suppliers))] public void LoadSuppliers(IQueryable<Suppliers> query, MergeOption mergeOption, object userState) { base.Load("GetSuppliers", null, query, mergeOption, userState); } #endregion
Y hasta aquí este post, espero poder escribir algún otro prontito para seguir explicando algunos detalles interesantes de RIA Services.
En dos anteriores veíamos un ejemplo de cómo funciona RIA Services y de cómo nos puede facilitar la creación