2010-10-15 16 views
6

Tengo una pregunta bastante simple para la que parece que no puedo encontrar la respuesta. Tengo una aplicación Silverlight con Ria Services. En la clase DomainService tengo un método de actualización, como a continuación:WCF Ria Services ChangeSet.GetOriginal(): ¿Cómo funciona?

public void UpdateConversationState(ConversationState currentConversationState) 
    { 
     var original = ChangeSet.GetOriginal(currentConversationState); 
     if (original != null) 
      ObjectContext.ConversationStatesRepository.AttachAsModified(currentConversationState, original); 
     else 
      ObjectContext.ConversationStatesRepository.Attach(currentConversationState); 
     currentConversationState.UpdDat = DateTime.Now; 
     if(original.Name != currentConversationState.Name) 
      //Do something extra 
    } 

El problema es que la propiedad Name está siempre vacío. De hecho, todos los campos excepto el Id tienen valores predeterminados. Intenté buscar cómo funciona el método GetOriginal, pero no encuentro ayuda. Me parece que intenta reconstruir el objeto original en el servidor, en función de los cambios que se envían de cliente a servidor.

¿O tal vez alguien conoce una forma mejor de comprobar si una cierta propiedad de un objeto ha sido modificada durante una actualización? Podría, por supuesto, compararlo con el valor en la base de datos, pero parece que debería evitar esta llamada extra a la base de datos.

Cualquier ayuda es de nuevo muy apreciada :-)

EDIT: acabo de enterar de la RoundTripOriginalAttribute. Esto parece hacer el truco. ¿Soy el único por cierto que piensa que RIA podría documentarse un poco mejor?

+0

Sí. La documentación en MSDN no es genial. Eche un vistazo al documento de cambios RIA Services 1.0 que contiene buena información, incluida RoundTripOriginalAttribute http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=RiaServices&DownloadId=8313. – robertkroll

Respuesta

3

Bueno, también he estado buscando una manera de rastrear cambios de entidad con EF4 y después de buscar en Google encontré que necesita aplicar el atributo "RoundTripOriginal" a las propiedades de la entidad que desea rastrear, porque RIA (de forma predeterminada) no envía los valores originales de vuelta al servidor.

todavía tienen algunas preocupaciones sobre esto y me preguntó a algunos de los gurús:

http://forums.silverlight.net/forums/t/218332.aspx

Esto funcionó para mí, pero todavía no lo creo es la mejor manera de salir de ella.

Espero que esto ayude.

Cuestiones relacionadas