如何阻止GraphDiff删除对象图中丢失的子项?

时间:2014-08-24 04:20:29

标签: c# .net entity-framework graphdiff

我目前正在开展一个项目,要求我们能够在某个时间点拉出对象和相关孩子的确切状态。为此,我们提出了一个类似于此的模型:

public class Parent
{
    [Key, Column(Order = 0)]
    public int Id { get; set; }

    [Key, Column(Order = 1)]
    public int Version { get; set; }

    // Additional properties & version management
}


public class Child
{
    [Key, Column(Order = 0)]
    public int Id { get; set; }

    [Key, Column(Order = 1)]
    public int Version { get; set; }

    [ForeignKey, Column(Order = 2)]
    public int ParentId { get; set;

    public virtual Parent Parent { get; set; }

    [ForeignKey, Column(Order = 3)]
    public int ParentVersion { get; set; }

    // Additional properties & version management
}

假设你有一个对象:

Parent 1v1
    Child 1v1
    Child 2v1

这将按预期使用GraphDiff保存。然后,我们加载父1v1,并更改它的一些内容。该版本将碰到2,子对象版本将碰到2.所以现在这个对象:

Parent 1v2
    Child 1v2
    Child 2v2

也会像我们想要的那样保存。为每个对象插入一条新记录,旧版本保留。但是,如果我们只更改子1对象,那么我们从上面的模型转到:

Parent 1v2
    Child 1v3   // We changed something here
    Child 2v2

并使用GraphDiff进行保存,它看到Child 1v2不再出现在图形中,并从数据库中删除它。我看到这个的唯一方法是必须得到2个方法。一个可以加载实际可用的内容,最大版本的父版本和子版本,以及一个加载整个图形的图像,包括每个历史对象。

我不想这样做。这个Blog Post宣布新的GraphDiff功能似乎表明可能有一些审计功能可用,但我找不到任何关于如何使用它的文档。

有没有办法在仅添加/更新模式下使用GraphDiff?

0 个答案:

没有答案