2016-05-30 3 views
0

У меня возникла проблема с использованием Silverlight 5, Ria и Entity Framework.объект ria, удаляющий значения свойств навигации после сохранения

При сохранении измененного объекта вызов SubmitChanges() возвращается с некоторыми свойствами навигации сущности, установленными в null. Сохранение произошло должным образом; правильные значения сохраняются, и если объект будет вызван позже, значения будут считаны правильно, свойства навигации будут установлены с соответствующими значениями.

Но контекст клиента становится обновляются с нулевыми значениями и проверка экрана ногами в

изменить набор непосредственно перед Сохранить:. change set before save

изменения устанавливается сразу после сохранения: Change set after save

Кто-нибудь знает, почему это происходит?

Я попытался обновить данные после сохранения; вызывая тот же запрос, который используется для заполнения экрана, с помощью LoadBehavior.RefreshCurrent. Данные возвращаются родителем, поэтому, когда он обновляется , все дочерние объекты теперь имеют свои свойства навигации равными нулю. Не только модифицированные объекты.

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

Может кто-нибудь помочь мне сохранить мои ценности после того, как они были спасены?

ответ

0

Я нашел проблему, ее было очень специфично, как моя логика здесь работала. Это оказалось некоторой каскадной логикой, которая установила мои идентификаторы равными нулю. Вот что я узнал, если у кого-то (или я в будущем) есть аналогичная проблема.

Если у вас есть дополнительные свойства клиентской стороны в вашей сущности, эти свойства будут удалены во время вызова SubmitChanges. Сервер не знает о них и устанавливает значение по умолчанию для этого типа.

Если у вас возникла логика, когда эти свойства клиентской стороны меняются, эта логика будет работать во время сохранения, когда значения очищаются сервером. В моем случае мне нужно было подавить свойство измененной логики до сохранения, а затем сбросить свойства клиентской стороны.

Смежные вопросы