Unbekannter Diskriminatorwert 'MyEvent'

8

Verwenden Sie die MongoDB-Persistenz-Engine in joliver / EventStore , die den Fehler Unknown discriminator value 'MyEvent' verursacht. Das Problem wird nur verursacht, wenn ich versuche, alle Ereignisse für die Wiedergabe der Ereignisse wie this.storeEvent.Advanced.GetFrom(new DateTime(2010, 1,1))

zu laden

Die Probleme werden in ExtensionsMethods.cs

verursacht %Vor%

Meine Konfiguration ist wie folgt:

%Vor%

Aber ich habe fast alle Arten von Serializer-Optionen ausprobiert.

    
Jacee 16.09.2011, 23:43
quelle

2 Antworten

10

Versuchen Sie, Ihre Objekte (die Ereignismeldungen sowie die Subjekte der EventStore-Nutzdaten) mithilfe der BsonClassMap.RegisterClassMap-Methode zu registrieren. Es scheint, dass die Mongo-Erweiterung von EventStore die Zeichenketten-Nutzdaten gut verarbeitet, aber nicht die deserialisierten Objekte ... zumindest war das Registrieren der Klassifizierten in meinem Fall die Lösung.

    
Zsolt Pardi 17.09.2011, 12:44
quelle
13

Ich bin eben auch reingerannt. Zsolts Antwort war ein guter Ausgangspunkt, aber ich habe es etwas anders gelöst.

Beachten Sie, dass ich dies nicht nur erhalten habe, wenn myEventStore.Advanced.GetFrom(...) ; myEventStore.OpenStream(...) schlägt ebenfalls fehl. Dies ist sinnvoll, da beide Methoden den gleichen IPersistentStream und Serializer verwenden.

Ich stoße nicht auf dieses Problem, wenn ich ein Ereignis zuerst erhalte, bevor ich ein Ereignis vom selben Typ abrufe. Anscheinend erstellt MongoDB ein ClassMap , wenn es darum gebeten wird, einen Typ zum ersten Mal zu serialisieren.

Für mich bestand die Lösung darin, beim Start der Anwendung eine Klassenzuordnung für alle meine Ereignistypen zu erstellen. Angenommen, alle Typen sind in der Assembly von SimpleCQRS.Event und leiten sich von SimpleCQRS.Event ab, mache ich das so:

%Vor%

Für mich funktioniert das besser als die Verwendung von BsonClassMap.RegisterClassMap<TypeToMap> , wie es Zsolt vorschlägt, da dies einen generischen Typparameter erfordert, was bedeutet, dass Sie jeden Ereignistyp manuell hinzufügen .

    
Marijn 31.07.2012 15:12
quelle