当微风子实体更新父实体状态不改变时
Posted
技术标签:
【中文标题】当微风子实体更新父实体状态不改变时【英文标题】:when breeze child entity update parent entity state is not change 【发布时间】:2016-03-25 20:46:15 【问题描述】:淘汰SPA
当我添加/更新子实体时,父实体状态不会改变。
以下场景我有这是使用微风进行客户端更改跟踪
public class Student
public int StudentId get; set;
public string Name get; set;
public Department Department get; set;
public class Department
public int DepartmentId get; set;
public string DepartmentName get; set;
当我更新“学生”的“部门”时,学生实体状态保持“未更改”。
如何从“学生”实体状态获取部门变更。
【问题讨论】:
【参考方案1】:当您更改导航属性 Department
时,您不会更改实体 Student
,因为在此进行更改的是 Department 的外键,所以如果您想获得状态,你需要知道改变的不是实体状态而是关系状态,所以你可以像这样得到ObjectContext
的状态:
要获取条目,请使用:
var objCtx = ((IObjectContextAdapter)ctx).ObjectContext;
//In your case use the EntityState.Modified
var objentr = objCtx.ObjectStateManager.GetObjectStateEntries(EntityState.Modified);
改变:
((IObjectContextAdapter)context).ObjectContext.ObjectStateManager.
ChangeRelationshipState(student, oldDepartment,
c => c.Department, EntityState.Modified);
解释问题后更新:
鉴于我所说的导航属性Department
也适用于Breeze,因此请参阅文档Navigations properties - EntityState and PropertyChanged events after setting 中的这一部分。
【讨论】:
谢谢,乔尔,我说的是客户端而不是服务器端。【参考方案2】:为什么不直接将 DepartmentID 属性添加到 Student 中?当 Department 更新时,DepartmentID 也会改变,EntityState 也会更新。
【讨论】:
以上是关于当微风子实体更新父实体状态不改变时的主要内容,如果未能解决你的问题,请参考以下文章
克隆 JavaScript 对象时如何排除键列表? [复制]