Una de las partes más importantes con el trabajo de datos es el poder hacer modificaciones en ellos. Esto incluye añadir nuevos registros, actualizarlos y eliminarlos. En esta ocasión estaremos viendo cómo es posible esto utilizando las características que WCF Ria Services nos ofrece.
Con el objetivo de mantener la simplicidad de los post, estaré escribiendo cada acción en un artículo diferente. En este veremos cómo es que funciona la actualización de datos. Esta, la acción que resulta más sencilla de las tres.
Actualización de datos, del lado del cliente
Uno de los detalles importantes a considerar en este proceso, es que los elementos que hemos usado para mostrar tanto la lista de registros como el detalle (y debido a que hemos dejado las propiedades en sus valores por default) la actualización de datos ya es posible del lado del cliente. Es decir, por ejemplo, en nuestra vista de detalle del registro podemos cambiar el valor que se muestra.
Lo que podemos observar, gracias a que tanto la lista de registros como el detalles están ligado al mismo Domain Data Source, es que al momento de que el TextBox pierde el foco, el dato también es actualizado en la lista de registros.
Pero es IMPORTANTE hacer notar que estos cambios solo están del lado del cliente. Esto quiere decir que en nuestra base de datos, no se ha hecho ninguna actualización. Así pues, si recargamos la aplicación (F5), podremos observar que los datos son nuevamente traídos desde la base de datos, y que nuestros cambios se han perdido.
Hacer la actualización en la base datos
Para hacer la actualización de los cambios hechos del lado del cliente, será necesario hacerlo desde el code behind de nuestro archivo xaml, por lo que agregaremos un botón que nos permita ejecutar un evento donde pondremos el código. Así pues, tendremos un botón con el siguiente codigo xaml:
<Button x:Name="btnSave"
Content="Guardar cambios"
Height="23"
Width="115"
HorizontalAlignment="Left"
Click="btnSave_Click" />
Es el evento de click donde pondremos nuestro código que indicara a WCF Ria Services que los cambios deberán ser guardados en la base de datos, en este caso al que hemos llamado btnSave_Click
La instrucción para que los datos sean guardados, al igual que el resto de nuestras acciones, es de manera muy sencilla, y solo consiste en indicarle al Domain Data Source, que haga un sometimiento de los cambios (submit changes):
private void btnSave_Click(object sender, System.Windows.RoutedEventArgs e)
{
productDomainDataSource.SubmitChanges();
}
Así pues, si verificamos los datos directamente en la base de datos (o si recargamos nuestra aplicación) veremos que los datos efectivamente han sido actualizados.
Siguientes post…
Quedan pendientes las otras dos acciones (agregar nuevo registro y eliminar registros) para las siguientes entregas, así como el hecho de regresar a explicar algunas características más sobre la vista de datos.
Gracias y saludos…

12 comments
Sepilrat says:
Jun 9, 2011
Hola.
Muy buenos aportes, pero sirve como para tener una idea de la tecnología, no encuentro aún un tutorial que se corresponda con la “vida real”
En general uno no trabaja solo con composición de objetos, y esto es lo que se muestra en todos los tutoriales, incluso en la web oficial.
Te agradecería si pudieras explicar como trabajar con una agregación de 1 a n.
Por ejemplo, Teniendo un objeto persona, la persona maneja vehículos, los vehiculos son seleccionados de una lista precargada.
Arturo Molina says:
Jun 10, 2011
Hola Sepilrat, esta liga te puede ser de utilidad: http://msdn.microsoft.com/en-us/Silverlight4TrainingCourse_SL4LOB_02_03_ShowingEvents
Ahí te muestra un video de como hacer lo que estás buscando. También puedes descargarte un Lab del mismo video aquí: http://msdn.microsoft.com/en-us/silverlight4trainingcourse_sl4businessmodule2_unit o incluso el Trainning kit completo: http://msdn.microsoft.com/en-us/gg315272
Espero te sea de utilidad.
Juan says:
Jun 14, 2011
Gracias por la respuesta.
En realidad en el video muestra como trabajar con composición, lo que necesito es agregación.
Por ejemplo: Se tiene una lista de usuarios y una lista de autos. Los autos son manejados por uno o varios usuarios. Esto implica (en la base de datos) una tabla intermedia que vincule ambas tablas.
En el mapeo es una lista de objetos usuario dentro de una entidad auto. pero ria aparentemente no resuelve esta situación.
Arturo Molina says:
Jun 14, 2011
Ah ya veo, quieres una relación muchos a muchos. En lo personal no he trabajado con un modelo así, pero no sé si esto te sirva:
http://forums.silverlight.net/forums/t/107386.aspx
Saludos
Sepilrat says:
Jun 15, 2011
GRacias, lo voy a ver.
Si no tuviste la necesidad de usar algo así, Cómo te las arreglas cuando tenes que seleccionar una opción de una lista?
Arturo Molina says:
Jun 15, 2011
Solo se me presentó el caso 1 a muchos. No muchos a muchos, osea, una entidad con una lista de entidades de otro tipo. Nunca necesité tablas intermediarias.
Jorge Levy says:
Jun 15, 2011
La idea de la serie de WCF Ria Services es abordar este caso, pues hay varios factores involucrados.
Cuando? no lo se…
Por lo pronto a ver si te puede ayudar esto:
XAML:
…
Saludos
Jorge Levy says:
Jun 15, 2011
Perdon, ya ví que es una relación mucho a muchos… Espero poder darme el tiempo de hecharle un ojo…
Saludos…
Sepilrat says:
Jun 16, 2011
Gracias. En realidad es uno a muchos. sugún entiendo hay dos tipos de uno a muchos :
1. factura- detalle (composición). La vida del detalle depende de la vida de la factura.
2. un auto puede ser manejado por varias personas (agregación). LA vida de la persona no depende del auto, son independientes.
En el primer caso ria lo maneja muy bien, en el segundo es el problema.
hay un desarrollo de tercera parte que intenta dar solución a esto m2m se llama, pero esta en beta, y no quiero complicarme la vida.
Otra opcvión es agregar la tabla intermedia al diagrama de clases. Ninguna de ellas me resulta atractiva.
saludos
Sergio Acosta says:
Jun 24, 2011
hola
Mi nombre es Sergio Acosta y necesito ayuda para pasar parametros de ria a query, el problema se presenta cuando deseo crear el predicado de la clausula where
basicamente es esto
en query recibo varios parametros y armo la cadena (string) antes de ejecutar el query
Public Function GetLlamadas(ByVal Fechainicial As Date, ByVal Fechafinal As Date, ByVal Grupof As String, ByVal Agentef As String, ByVal Tipollamada As String, ByVal Efectivasf As String) As IQueryable(Of Llamada)
Dim Cadenagrupo, Cadenaagente, Cadenatipo, Cadenaefectiva As String
Dim Cadenasfiltro As String
Cadenagrupo =
Cadenagrupo =
“”
Cadenaagente =
Cadenaagente =
“”
Cadenatipo =
Cadenatipo =
“”
Cadenaefectiva =
Cadenaefectiva =
“”
If Grupof Nothing Then
Cadenagrupo =
Cadenagrupo =
” And (e.Grupo = Grupof)”
End If
If Agentef Nothing Then
Cadenaagente = Cadenaagente +
Cadenaagente = Cadenaagente +
” And (e.Agente = Agentef)”
End If
If Tipollamada “Todas” And Tipollamada Nothing Then
Cadenatipo = Cadenatipo +
Cadenatipo = Cadenatipo +
” And (e.Tipo = Tipollamada)”
End If
If Efectivasf “Todas” And Efectivasf Nothing Then
If Efectivasf = “Contestada” Then
Cadenaefectiva =
Cadenaefectiva =
” And (e.Efectiva=True)”
Else
Cadenaefectiva =
Cadenaefectiva =
” And (e.Efectiva=False)”
End If
End If
Cadenasfiltro =
Cadenasfiltro =
” (e.Fecha. >= Fechainicial And e.Fecha <= Fechafinal)" + Cadenagrupo + Cadenaagente + Cadenatipo + Cadenaefectiva
Return Me.ObjectContext.Llamadas.Where(Cadenasfiltro).OrderBy(Function(e) e.Fecha)
End Function
Pueden ayudarme a convertir la cadena en predicado?
Arturo Molina says:
Jun 24, 2011
Que tal Sergio, podrías meter el código en algo como http://snipt.org/ para leerlo mejor?
Ignacio Rodriguez says:
Oct 1, 2011
Hola a todos los seguidores de este blog, el mejor que encontré en español.
Jorge Levy, Excelentes aportes muy bien explicados e ilustrados la verdad me son de mucha utilidad.
Quisiera saber si de casualidad alguien sabe dónde puedo encontrar un ejemplo de inserción, eliminación, también como se podrían usar procedimientos almacenados con Ria services la verdad cualquier aporte es bien recibido.