2016-05-30 1 views
0

J'ai un problème avec Silverlight 5, Ria et Entity Framework.entité ria abandonnant les valeurs de propriété de navigation après enregistrement

Lors de la sauvegarde d'une entité modifiée, l'appel SubmitChanges() renvoie certaines propriétés de navigation de l'entité définies sur null. L'enregistrement s'est bien passé. les valeurs correctes sont sauvegardées, et si l'entité est rappelée plus tard, les valeurs sont lues correctement, les propriétés de navigation sont définies avec les valeurs appropriées.

Mais le contexte client obtient mis à jour avec les valeurs NULL et la validation de l'écran est PASSENT

changement immédiatement avant d'Economie:. change set before save

changement de jeu immédiatement après Economie: Change set after save

Quelqu'un sait pourquoi cela se passe-t-il?

J'ai essayé d'actualiser les données après l'enregistrement; en appelant la même requête utilisée pour remplir l'écran, avec LoadBehavior.RefreshCurrent. Les données sont rappelées par leur parent, donc quand elles sont rafraîchies toutes les entités enfants ont maintenant leurs propriétés de navigation définies sur null. Pas seulement les entités modifiées.

public kcc_Incentive GetKcc_IncentiveByID(Guid IncentiveID) 
{ 
    //kcc_Incentive Incentive = this.ObjectContext.kcc_Incentive.Where(i => i.IncentiveId == IncentiveID).FirstOrDefault(); 
    //if (Incentive != null) 
    //{ 

    // Incentive.kcc_IncentiveProductType.Load(); //these are the entities I'm having trouble with 
    // foreach (kcc_IncentiveProductType t in Incentive.kcc_IncentiveProductType) 
    // { 
    //  t.rate_FullModelReference.Load(); 
    //  t.rate_BaseModelReference.Load(); 
    //  t.rate_SeriesReference.Load(); 
    // } 
    //} 
    //return Incentive; 

    //getting same results regardless of how it is loaded 

    return ObjectContext.kcc_Incentive 
     .Include("kcc_IncentiveProductType.rate_FullModel") 
     .Include("kcc_IncentiveProductType.rate_BaseModel") 
     .Include("kcc_IncentiveProductType.rate_Series") 
     .Include("kcc_IncentiveProductType.rate_ProductType.dms_Make") 
     .FirstOrDefault(i => i.IncentiveId == IncentiveID); 
} 

Quelqu'un peut-il me aider à garder mes valeurs après avoir été sauvé?

Répondre

0

J'ai trouvé le problème, c'était très spécifique à la façon dont ma logique fonctionnait ici. Il s'est avéré être une logique en cascade qui a mis mes ids à zéro. Voici ce que j'ai appris, au cas où quelqu'un (ou moi-même dans le futur) aurait un problème similaire.

Si vous avez des propriétés côté client supplémentaires dans votre entité, ces propriétés seront effacées lors de l'appel SubmitChanges. Le serveur ne les connaît pas et ils ont la valeur par défaut pour ce type.

Si vous avez la logique pour savoir quand ces propriétés côté client changent, cette logique s'exécutera pendant la sauvegarde lorsque les valeurs seront effacées par le serveur. Dans mon cas, j'avais besoin de supprimer la logique modifiée de la propriété jusqu'à la sauvegarde, puis de réinitialiser les propriétés côté client.