Создание нескольких индексов в транзакции с использованием строго типизированного драйвера C # Mongodb - PullRequest
0 голосов
/ 20 мая 2018

Я использую официальный строго типизированный драйвер C # MongoDb версии 2.7.0-beta0001 для взаимодействия с MongoDB.

Я пытаюсь создать несколько индексов в одной транзакции, но всегда получаю "Сообщение «Ссылка на объект не установлена ​​для экземпляра объекта».

Даже если я не использовал транзакции, удалив переменную сеанса, я также получаю то же исключение.

Здесьмой код:

var client = new MongoClient(ConnectionString);

var database = client.GetDatabase(DatabaseName);

var Coupons = database.GetCollection<Coupon>("Coupons");

var Books = database.GetCollection<Book>("Books");

var session = await database.Client.StartSessionAsync();
session.StartTransaction();

try {

     var options = new CreateIndexOptions() { Unique = true };

     var couponIndex = new IndexKeysDefinitionBuilder<Coupon>().Ascending(c => c.CouponNumber);
     var couponIndexModel = new CreateIndexModel<Coupon>(couponIndex, options);
     await Coupons.Indexes.CreateOneAsync(session, couponIndexModel);//Exception happens at this line

     var bookIndex = new IndexKeysDefinitionBuilder<Book>().Ascending(c => c.BookNumber);
     var bookIndexModel = new CreateIndexModel<Book>(bookIndex, options);
     await Books.Indexes.CreateOneAsync(session, bookIndexModel);

     await session.CommitTransactionAsync();
} catch (Exception ex) {
     await session.AbortTransactionAsync();

     Console.WriteLine(ex.StackTrace);
}

Вот подробности исключения: -

Message "Object reference not set to an instance of an object."

Source  "MongoDB.Driver"

StackTrace  "at MongoDB.Driver.MongoIndexManagerBase`1.ToCreateManyIndexesOptions(CreateOneIndexOptions options)
at MongoDB.Driver.MongoIndexManagerBase`1.CreateOneAsync(IClientSessionHandle session, CreateIndexModel`1 model, CreateOneIndexOptions options, CancellationToken cancellationToken)

TargetSite  {MongoDB.Driver.CreateManyIndexesOptions ToCreateManyIndexesOptions(MongoDB.Driver.CreateOneIndexOptions)}  System.Reflection.MethodBase {System.Reflection.RuntimeMethodInfo}

{System.NullReferenceException: Object reference not set to an instance of an object.
at MongoDB.Driver.MongoIndexManagerBase`1.ToCreateManyIndexesOptions(CreateOneIndexOptions options)
at MongoDB.Driver.MongoIndexManagerBase`1.CreateOneAsync(IClientSessionHandle session, CreateIndexModel`1 model, CreateOneIndexOptions options, CancellationToken cancellationToken)

1 Ответ

0 голосов
/ 30 мая 2018

Я пытаюсь создать несколько индексов в одной транзакции

Операции, которые влияют на каталог базы данных, такие как создание или удаление коллекции или индекса, не являютсяразрешено в многодокументных транзакциях.

См. Также Транзакции MongoDB и операции CRUD для получения дополнительной информации.

Команды MongoDB , поддерживаемые в транзакциях:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...