当微风子实体更新父实体状态不改变时

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 也会更新。

【讨论】:

以上是关于当微风子实体更新父实体状态不改变时的主要内容,如果未能解决你的问题,请参考以下文章

如何在更新父有状态小部件时更新子有状态小部件

在 EF 中更新父实体时如何添加/更新子实体

父组件状态改变,子组件不重新渲染

克隆 JavaScript 对象时如何排除键列表? [复制]

在JPA双向@OnetoMany关系中,当我更新父实体时,子实体在数据库中被删除

如何在不更新具有多对多关系的子实体的情况下保留父实体?