2011-12-03 15 views
5

Tengo un problema para llamar de nuevo al servicio WCF RIA para actualizar los datos en el lado del cliente. Aquí es mi caso:Cómo actualizar la instancia de la entidad en el lado del cliente con el servicio wcf ria?

del lado del servidor, un servicio de dominio es algo así como:

public IQueryable<Person> GetPersonByID(int id) 
     { 
      var result = this.ObjectContext.Persons. 
       Where(e => e.PersonID == id); 
      return result; // check point 1 
     } 

En el lado del cliente, hago una llamada de la siguiente manera (esto es llamado por un botón que se llama "actualización "botón):

this._amsService.Context.Load<Person>(
    this._amsService.Context.GetPersonByIDQuery(this.Person.ID), 
    LoadBehavior.RefreshCurrent, 
    result => 
    { 
     this.Person = result.Entities.FirstOrDefault(); //check point 2 
     this.RaisePropertyChanged("Person");  

    }, null); 

Aquí es lo que estoy tratando:

Supongamos que tengo una persona en la base de datos con los datos dicen personID=1, Age = 16.

  1. Luego, ejecute la aplicación, obtengo los datos de la manera correcta.

  2. luego vaya a la base de datos, actualice los datos con SQL para cambiar Age = 20.

  3. Luego, vuelva a la aplicación y haga clic en el botón "actualizar" para realizar una nueva llamada, pero la edad no se actualiza a 20, todavía es 16.

que ejecutar la aplicación en modo de depuración, y comprobar los datos:

En el punto 1 cheque, puedo comprobar los datos en consecuencia, está bien, Age = 20.

En el punto de verificación 2, verifico los datos en result.Entities, los datos no se han actualizado, todavía es Age = 16.

He intentado LoadBehavior.MergeIntoCurrent,LoadBehavior.RefreshCurrent, pero no tuve éxito.

Necesito actualizar la página del host de la aplicación SL para volver a cargar toda la aplicación SL, luego puedo ver los datos nuevos. Esto no es aceptable para los usuarios finales.

No entiendo por qué. También trato de usar el violín para capturar los datos cuando hago clic en el botón Actualizar, los datos obtuvieron el último Age = 20.

Cómo resolver este problema?

+0

Para ser claros, ¿qué ves cuando configuras el punto de interrupción en "this.RaisePropertyChanged (" Person ");"? –

+0

¿Se puede depurar el código del lado del servidor y ver qué devuelve? Si la entidad se almacena en caché en una sesión del lado del servidor, esta podría ser la razón por la que los datos no se actualizan. Además, no necesita volver a establecer la propiedad de su persona en el lado del cliente, simplemente ejecute la consulta, y los servicios de RIA elevarán el evento de cambio de propiedad de edad en la persona actual. – Tevin

+0

Creo que deberías agregar submitchanges() en el lado del servidor –

Respuesta

0

Antes que nada, ¿es usted entidad en el modo de edición? si su entidad está en modo Edición, RIA mantendrá sus cambios, y solo actualizará los valores originales cuando cargue la entidad nuevamente.

Puede comprobar la propiedad IsEditing de su entidad Person para averiguarlo. e intenta verificar el valor original de tu entidad. var original = Person.GetOriginal()

Cuestiones relacionadas