实体ria保存后删除导航属性值

时间:2016-05-30 16:22:19

标签: entity-framework-4 silverlight-5.0

我在使用Silverlight 5,Ria和Entity Framework时遇到了问题。

保存修改后的实体时,SubmitChanges()调用返回,并将某些实体的导航属性设置为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);
}

任何人都可以帮助我保存我的价值观吗?

1 个答案:

答案 0 :(得分:0)

我发现了这个问题,它非常具体到我的逻辑工作方式。事实证明是一些级联逻辑将我的id设置为null。以下是我学到的内容,以防有人(或将来自己)遇到类似的问题。

如果您的实体中有额外的客户端属性,则在SubmitChanges调用期间将清除这些属性。服务器不知道它们,它们被设置为该类型的默认值。

如果您碰巧有这些客户端属性发生更改的逻辑,那么该逻辑将在保存期间运行,因为服务器会清除这些值。在我的情况下,我需要抑制属性更改逻辑,直到保存后,然后重置客户端属性。