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