2

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

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 个 get 方法。一个加载实际可用的内容,最大版本的父级和子级,另一个加载整个图表,包括每个历史对象。

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

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

4

0 回答 0