Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# J Oliver EventStoreRepository未返回快照_C#_Snapshot_Event Sourcing_Neventstore - Fatal编程技术网

C# J Oliver EventStoreRepository未返回快照

C# J Oliver EventStoreRepository未返回快照,c#,snapshot,event-sourcing,neventstore,C#,Snapshot,Event Sourcing,Neventstore,我使用的是J Oliver制作的EventStore和CommonDomain框架。我注意到,当我创建快照时,它没有被传递到我的聚合工厂,我想知道为什么。这是我构建聚合的聚合工厂方法: public IAggregate Build(Type type, Guid id, IMemento snapshot) { ConstructorInfo constructor = type.GetConstructor(BindingFlags.NonPublic | BindingFlags.

我使用的是J Oliver制作的EventStore和CommonDomain框架。我注意到,当我创建快照时,它没有被传递到我的聚合工厂,我想知道为什么。这是我构建聚合的聚合工厂方法:

public IAggregate Build(Type type, Guid id, IMemento snapshot)
{
    ConstructorInfo constructor = type.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(Guid) }, null);
    IAggregate aggregate = constructor.Invoke(new object[] { id }) as IAggregate;
}
snapshot参数在应使用快照填充时为null,因为我将此添加到方法时:

Snapshot snapshotContainer = _store.Advanced.GetSnapshot(id, int.MaxValue);
snapshot = snapshotContainer == null ? null : snapshotContainer.Payload as IMemento;

它显示快照已填充。这里发生了什么?

好的,我发现了问题,显然EventStoreRepository的GetById方法将版本0传递给它重载的底层方法。因此,本质上,它将尝试加载快照直到版本0,而版本0显然不会返回快照

在检索聚合时,我通过添加int.MaxValue作为额外参数更改了命令处理程序,现在聚合工厂获得了传递的快照

当我进一步查看时,我发现最新的nuget软件包中包含了这个同样影响其他人的bug:

它已在存储库中更新;
但似乎没有发布。希望有一天它会得到更新。

好的,我发现了问题,显然EventStoreRepository的GetById方法会将版本0传递给它重载的底层方法。因此,本质上,它将尝试加载快照直到版本0,而版本0显然不会返回快照

在检索聚合时,我通过添加int.MaxValue作为额外参数更改了命令处理程序,现在聚合工厂获得了传递的快照

当我进一步查看时,我发现最新的nuget软件包中包含了这个同样影响其他人的bug:

它已在存储库中更新; 但似乎没有发布。希望有一天能更新