Las clases de metadatos
En este post vamos a seguir profundizando en las características de RIA Services. En este caso vamos a hablar sobre las clases para los metadatos y las cosas que podemos hacer con ellas.
En los post anteriores hemos ido viendo un ejemplo de cómo crear una aplicación RIA haciendo uso de RIA Services.
En uno de los pasos, al crear el DomainService para exponer los servicios al cliente, nos salía una ventana como esta que pongo a continuación, desde la cual configurábamos la parte del modelo de datos que queremos exponer. Recordad que para crear el modelo hacíamos uso de Entity Framework.

En la parte inferior hay una opción que indica si deben generarse las clases de metadatos. En los post anteriores no habías comentado lo que hace esta opción y para qué sirve; ahora llega el momento de hacerlo.
Las clases de metadatos son clases parciales que nos va a permitir añadir más información a otros clases parciales.
En el ejemplo que estamos viendo estamos usando un modelo de datos de Entity Framework. Si viésemos el código generado al crear el modelo (podemos verlo en Northwind.Designer.cs) con nuestra entidad Suppliers, veríamos que existe una clase partial llamada Suppliers, con la definición de esta entidad.
public partial class Suppliers : global::System.Data.Objects.DataClasses.EntityObject
Las clases de metadatos nos va a permitir añadir más información a estas clases autogeneradas, por ejemplo, añadir un campo más que no está en el modelo o simplemente completar la información que ya existe y que no está representada en el modelo; si un campo en obligatorio, si soporta cierto rango de valores etc….Lo que hacemos es completar el modelo.
Esta información extra se podría hacer modificando directamente las clases del modelo, pero al ser código autogenerado habría muchas opciones de perderlo en alguna modificación, por lo que es más recomendable hacerlo en una clase diferente.
Seleccionando el check de “generar clases de metadatos” lo que se hace es generar automáticamente la estructura de la clases de metadatos para todas las entidades del modelo. En nuestro ejemplo, nos genera el fichero SuppliersService.metada.cs, para poder añadir información extra a la entidad Suppliers.
Si no hubiéramos seleccionado esta opción siempre podríamos crear estas clases posteriormente, pero si tenemos muchas entidades puede ser un poco pesado hacerlo, así que si nos lo genera mejor.
Si veis la definición de la clase de metadatos verías algo así:
[MetadataTypeAttribute(typeof(Suppliers.SuppliersMetadata))]
public partial class Suppliers
A través de los atributos podemos añadir información, por ejemplo, añadir restricciones a las propiedades de la clase; si es obligatorio, que debe cumplir una expresión regular, un determinado tamaño etc..…incluso podríamos añadir nuestro propio validador personalizado.
[Required]
[RegularBLOCKED EXPRESSION]
public string Name;
Y por qué es útil esto para RIA Services?
Pues porque RIA Servives es capaz de usar esta información que le suministramos y respectará y usará estas restricciones durante la validación y la generación del código cliente.
Por ejemplo, si hiciésemos una aplicación con Silverligth usando DataGrid o el FormData esta información nos será de gran utilidad.
