我在使用Silverlight 5,Ria和Entity Framework时遇到了问题。
保存修改后的实体时,SubmitChanges()调用返回,并将某些实体的导航属性设置为null。保存正常;保存正确的值,如果稍后调用实体,则会正确读取值,导航属性将使用正确的值设置。
但客户端的上下文正在使用空值进行更新,并且屏幕验证正在进行中。
保存后任何人都知道为什么会这样吗?
我在保存后尝试刷新数据;通过调用用于填充屏幕的相同查询,使用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 :(得分:0)
我发现了这个问题,它非常具体到我的逻辑工作方式。事实证明是一些级联逻辑将我的id设置为null。以下是我学到的内容,以防有人(或将来自己)遇到类似的问题。
如果您的实体中有额外的客户端属性,则在SubmitChanges调用期间将清除这些属性。服务器不知道它们,它们被设置为该类型的默认值。
如果您碰巧有这些客户端属性发生更改的逻辑,那么该逻辑将在保存期间运行,因为服务器会清除这些值。在我的情况下,我需要抑制属性更改逻辑,直到保存后,然后重置客户端属性。