【问题标题】: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; }
}

当我更新“学生”的“部门”时,学生实体状态保持“未更改”。

如何从“学生”实体状态获取部门变更。

【问题讨论】:

    标签: c# knockout.js breeze single-page-application


    【解决方案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 也会更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 2014-04-08
      • 2019-12-05
      • 1970-01-01
      • 2014-11-02
      相关资源
      最近更新 更多