2016-05-30 11 views
0

Silverlight 5、RiaおよびEntity Frameworkを使用しているときに問題が発生しています。エンティティria保存後のナビゲーションプロパティ値の削除

変更されたエンティティを保存すると、SubmitChanges()呼び出しが返され、エンティティのナビゲーションプロパティの一部がnullに設定されます。保存が正しく行われました。正しい値が保存され、後でエンティティが呼び出されると正しく値が読み込まれ、適切な値でナビゲーションプロパティが設定されます。

しかし、クライアントのコンテキストがnull値で更新取得され、画面の検証がで蹴っている保存直前に設定

変更:。すぐに保存した後に設定 change set before save

変更: Change set after save

これはなぜ起こっているのですか?

私は保存後にデータを更新しようとしました。 LoadBehavior.RefreshCurrentを使用して、画面を埋めるために使用されたのと同じクエリを呼び出すことによって、データは親によってリコールされているため、リフレッシュされると、すべての子エンティティのナビゲーションプロパティがnullに設定されるようになりました。変更されたエンティティだけではありません。

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呼び出し中にクリアされます。サーバはそれらを知らず、そのタイプのデフォルト値に設定されます。

これらのクライアント側のプロパティが変更されたときにロジックが発生した場合、そのロジックはサーバーによって値がクリアされるため、保存中に実行されます。私の場合は、保存してからクライアント側のプロパティをリセットするまで、ロジックを変更したロジックを抑制する必要がありました。

関連する問題