Spargo.Net: Universidad de Caldas

RIA Services: Paso a paso (II)

En un post anterior hablaba sobre Services y se empezo con un ejemplo sencillo de cómo crear una aplicación con 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:

9_thumb1

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);
    }
}
Es una clase que deriva de LinqToEntitiesDomainService y como característica especial destacar que está decorada con el atributo EnableClientAccess, que es la manera de decir que esta clase tiene que estar accesible desde el proyecto cliente.
También observar que se han generado los método típicos de cualquier aplicación guiada por datos. Se han creado los métodos y las llamadas necesarias al modelo de Entity Framework para realizar las opciones CRUD ( Create/Read/Update/Delete).
En este caso, las llamadas son llamadas directas al modelo, pero en esta clase podríamos incluir toda la lógica que consideremos para cubrir la funcionalidad que necesitemos en la aplicación.
Por cierto, si en el diálogo de creación del servicio no hubiéramos seleccionado la opción “Enable Editing”, sólo se hubiera creado el método GetSuppliers.
Después de generar el servicio y compilar la solución, veremos cómo automáticamente se ha creado el proxy en el cliente. Para poder verlo es necesario seleccionar la opción “Show All Files”.
11 5F00 thumb 5F00 4B991985 RIA Services: Paso a paso (II)
El atributo EnableClientAccess y el hecho de que ambos proyectos “estén unidos” hace que al crear o cambiar los servicios del servidor ( DomainService ) se creen los proxys necesarios en el cliente ( DomainContext ).
RIA3 5F00 thumb 5F00 3CA1C49E RIA Services: Paso a paso (II)
Fijaros cómo en el cliente se accede a través de SupplierContext y cómo en lugar de llamarse el método GetSuppliers, como está en el DomainService, se llama LoadSuppliers. Este cambio lo hace Services y en un post posterior veremos por qué lo hace.
13_thumb3
Por completar el ejemplo anterior, vamos a hacer que en el grid de datos sólo se muestren los proveedores que de una determinada ciudad.
Para ello, vamos a añadir un nuevo parámetro al método GetSuppliers del servicio de dominio. También añadiremos la sentencia de LINQ to Entities necesaria para obtener la información que nos interesa del modelo.
public IQueryable<Suppliers> GetSuppliers(string city)
{
    return (from c in this.Context.Suppliers
            where c.City == city
            select c);
}
Una vez realizado este cambio en el cliente tendremos ya accesible el nuevo método con el parámetro, sin hacer nada más.
SuppliersContext context = new SuppliersContext();
gridRiaDemo.ItemsSource = context.Suppliers;
context.LoadSuppliers("London");

17 5F00 thumb 5F00 676A02E3 RIA Services: Paso a paso (II)

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:

18 5F00 thumb 5F00 327CFDA6 RIA Services: Paso a paso (II)

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, esperamos  explicar algunos detalles interesantes de Services mas adelante.

Escrito por Ibon Landa

Fuente: Yo sólo pasaba por aquí pero ya que estoy…

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
If you enjoyed this post, please consider leaving a comment or subscribing to the RSS feed to have future articles delivered to your feed reader.

Related posts:

  1. Silverlight 3 y .NET RIA Services Brad Abrams ha publicado en su blog una magnífica serie...

Related posts brought to you by Yet Another Related Posts Plugin.

You must be logged in to post a comment.

SEO Powered by Platinum SEO from Techblissonline