当breeze子实体更新父实体状态没有改变时

时间:2015-12-19 05:16:24

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

淘汰SPA

当我添加/更新子实体时,父实体状态不会更改。

在场景之后我使用breeze进行客户端更改跟踪

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; }
}

当我更新'部门'学生实体状态保持不变'。

如何从“学生”中获得部门变更?实体国家。

2 个答案:

答案 0 :(得分:1)

当您更改导航属性Department时,您不会更改实体Student,因为对此进行更改的是部门的标记键,因此,如果你想获得状态,你需要知道不是被改变的实体状态,它是被改变的关系状态,所以你可以像这样获得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中的此部分。

答案 1 :(得分:0)

为什么不直接将DepartmentID属性添加到学生?部门更新后,DepartmentID也会更改,EntityState将更新。