Я тоже столкнулся с этим. Ответ Zsolt был хорошей отправной точкой, но я решил немного его изменить.
Обратите внимание, что я не только получил это, когда myEventStore.Advanced.GetFrom(...)
; myEventStore.OpenStream(...)
также не работает. Это имеет смысл, потому что оба метода используют один и тот же IPersistentStream
и сериализатор.
Я не сталкиваюсь с этой проблемой, когда в первый раз сохраняю событие перед извлечением события того же типа. Очевидно, MongoDB создает ClassMap
, когда его просят сериализовать тип в первый раз.
В любом случае, для меня решение было создать карту классов для всех моих типов событий при запуске приложения. Предполагая, что все типы находятся в сборке SimpleCQRS.Event
и являются производными от SimpleCQRS.Event
, я делаю это так:
var types = Assembly.GetAssembly(typeof(SimpleCQRS.Event))
.GetTypes()
.Where(type => type.IsSubclassOf(typeof(SimpleCQRS.Event)));
foreach (var t in types)
BsonClassMap.LookupClassMap(t);
Для меня это работает лучше, чем использование BsonClassMap.RegisterClassMap<TypeToMap>
, как предлагает Zsolt, потому что для этого требуется параметр общего типа, то есть вы должны вручную добавить каждый тип события .