2016-05-30 112 views
0

我在使用Silverlight 5,Ria和實體框架時遇到問題。實體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

我發現問題,它是非常具體的如何我的邏輯在這裏工作。事實證明,這是一些級聯邏輯,將我的id設置爲null。以下是我所學到的,以防某人(或我未來)有類似的問題。

如果您的實體中有額外的客戶端屬性,這些屬性將在SubmitChanges調用期間被清除。服務器不知道它們,並將它們設置爲該類型的默認值。

如果你碰巧有邏輯,當這些客戶端屬性改變時,邏輯將在保存期間運行,因爲服務器清除值。在我的情況下,我需要壓縮屬性更改邏輯,直到保存後,然後重置客戶端屬性。