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