Я пишу код C#, чтобы вытащить данные из существующей базы данных MongoDB и поместить ее в различные классы C#. Одна часть базы данных является полиморфной: если поле type
равно A, то в этом документе будет существовать определенный набор полей. Если type
- B, то будет существовать другой набор полей. Это идеальный вариант использования для ScalarDiscriminatorConvention
, поэтому я использую ScalarDiscriminatorConvention("type")
. Но я не знаю, как заставить использовать драйвер MongoDB!Как зарегистрировать ScalarDiscriminatorConvention для другого имени поля в MongoDB?
The MongoDB manual page on conventions заставил меня думать, что это будет работать:
var pack = new ConventionPack();
pack.Add(new CamelCaseElementNameConvention());
pack.Add(new ScalarDiscriminatorConvention("type"));
ConventionRegistry.Register(
"My Custom Conventions",
pack,
t => t.FullName.StartsWith("MyNamespace."));
Но это не удается, потому что ScalarDiscriminatorConvention
не вытекает из интерфейса IConvention
как другие конвенции делать. Он происходит от IDiscriminatorConvention
, который является его собственным интерфейсом, который не является результатом IConvention
. И ConventionPack.Add
ожидает параметр IConvention
.
Как я могу зарегистрировать другое поле дискриминатора? В течение часа я охотился в руководстве MongoDB, и я совершенно не понимаю. Кажется, они не документировали нигде, что я мог найти.
Документов здесь: http://mongodb.github.io/mongo-csharp- водитель/2,1/ссылка/BSON/отображение/полиморфизма /. Однако, похоже, это не документировано ... Я найду дополнительную информацию. –
@CraigWilson - Да, эта страница может означать функцию «BsonSerializer.RegisterDiscriminatorConvention». В отсутствие такого упоминания я думал, что мне нужно добавить его в «ConventionPack», как и все другие объекты «FooConvention», и я спустился по нескольким кроличьим тропам, пытаясь понять это. – rmunn
@CraigWilson - только что созданный https://jira.mongodb.org/browse/CSHARP-1465 для отслеживания этой потребности в документации. – rmunn