2016-05-30 12 views
0

Ich habe ein Problem mit Silverlight 5, RIA und Entity Framework.Entität ria Navigation Navigationseigenschaft Werte nach speichern

Beim Speichern einer geänderten Entität wird der SubmitChanges() - Aufruf mit einigen der Navigationseigenschaften der Entität auf null zurückgesetzt. Die Speicherung ist ordnungsgemäß erfolgt. Die korrekten Werte werden gespeichert, und wenn die Entität später aufgerufen wird, werden die Werte korrekt eingelesen, und die Navigationseigenschaften werden mit den richtigen Werten festgelegt.

Aber im Kontext des Client wird immer mit null Werten aktualisiert und auf dem Bildschirm Validierung in kicking

Änderung unmittelbar vor dem Speichern eingestellt. change set before save

Änderung sofort nach Speichern gesetzt: Change set after save

Wer weiß, warum das passiert?

Ich habe versucht, die Daten nach dem Speichern zu aktualisieren; durch Aufrufen derselben Abfrage, die zum Füllen des Bildschirms verwendet wurde, mit LoadBehavior.RefreshCurrent. Die Daten werden von ihrem übergeordneten Element abgerufen. Wenn sie aktualisiert wird, haben nun alle untergeordneten Entitäten ihre Navigationseigenschaften auf null gesetzt. Nicht nur die modifizierten Entitäten.

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); 
} 

Kann jemand mir helfen, meine Werte zu halten, nachdem sie gespeichert wurden?

Antwort

0

Ich fand das Problem, es war sehr spezifisch, wie meine Logik hier funktionierte. Es stellte sich heraus, dass es sich um eine Kaskadenlogik handelte, die meine IDs auf null setzte. Hier ist, was ich gelernt habe, falls jemand (oder ich selbst in der Zukunft) ein ähnliches Problem hat.

Wenn Sie in Ihrer Entität zusätzliche clientseitige Eigenschaften haben, werden diese Eigenschaften während des SubmitChanges-Aufrufs gelöscht. Der Server kennt sie nicht und sie werden auf den Standardwert für diesen Typ festgelegt.

Wenn Sie eine Logik dafür haben, wann sich diese clientseitigen Eigenschaften ändern, wird diese Logik beim Speichern ausgeführt, da die Werte vom Server gelöscht werden. In meinem Fall musste ich die Eigenschaftsänderungslogik bis nach dem Speichern unterdrücken und dann die clientseitigen Eigenschaften zurücksetzen.

Verwandte Themen