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?
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