2013-07-01 4 views
3

Я добавил код в ответ на этот вопрос: Unknown discriminator value 'MyEvent', но это не помогло.MongoDB Неизвестное значение дискриминатора

Произошла ошибка при десериализации свойства Body класса EventStore.EventMessage: Неизвестное значение дискриминатора: «Вставить имя события». Ошибка возникает только при попытке повторно сохранить сохраненный объект после перезапуска программы.

Запуск последней MyGet сборки

Sample Repository: https://github.com/tonyeung/EventStore-MongoDB

Чтобы воспроизвести проблему:

запустить программу
Нажмите кнопку C, чтобы создать новую запись
нажмите д бросить
бежать программа снова
, но нажмите r для регидратации
ошибок

Если вы запустите программу, нажмите c, нажмите enter, чтобы продолжить, и нажмите r для регидратации без выхода, объект будет лигирован без проблем. WAT?

 using (var eventStore = WireupEventStore()) 
     { 
      var snapshot = eventStore.Advanced.GetSnapshot(ID, int.MaxValue); 
      if (snapshot == null) 
      { 
       // ERRORS HERE 
       using (var stream = eventStore.OpenStream(ID, 0, int.MaxValue)) 
       { 
        var events = from s in stream.CommittedEvents 
           select s.Body as IEvent; 

        obj.LoadsFromHistory(events); 
       } 
      } 
     } 

GitHub вопрос: https://github.com/NEventStore/NEventStore/issues/203

ответ

3

Я понял это, так как я использовал интерфейс в качестве маркеров для моих событий, я должен был изменить запрос от вопроса SO от

 var types = Assembly.GetAssembly(typeof(SimpleCQRS.Event)) 
       .GetTypes() 
       .Where(type => type.IsSubclassOf(typeof(SimpleCQRS.Event))); 

до

 var type = typeof(IEvent); 
     var types = Assembly.GetAssembly(typeof(IEvent)) 
       .GetTypes() 
       .Where(t => type.IsAssignableFrom(t)) 
       .Where(t => t.IsClass); 
Смежные вопросы