У меня есть абстрактный класс "Компания". «Клиент» и «Агентство» наследуются от этого класса. Оба хранятся в коллекции "Компании". У меня есть поле дифференциатора с именем "companyType".
С C # API 2 и MongoDb C # драйвер 2:
Я могу получить все документы «Клиента» и все документы «Агентства».
Я могу получить любой «Клиент» по _id.
Я не могу получить ни одного «Агентства» по _id.
Я не могу получить этот документ с помощью Почтальона и не получаю никакого возврата, но я могу получить эту запись в 3T.
Отладка в моем API просто останавливается в ожидании ... Найти.
У меня похожая ситуация с другой коллекцией, где все документы относятся к одному классу: возвращает все документы, но не один по идентификатору. Однако в этом случае Postman отображает ошибку сериализации. Почему за 1, но не за всех?
В приведенном выше примере я могу успешно установить «Агентство» (я вижу его в БД), но, используя FindOneAndReplaceOptions для isUpsert: true и ReturnDocument: After, ничего не возвращается.
Отдельная запись
публичная асинхронная задача GetAgencyByIdAsync (идентификатор строки)
{
пытаться
{
return await dbContext.Agency.Find (x => x.Id == id) .FirstOrDefaultAsync ();
}
поймать (исключение ex)
{
бросить экс;
}
}
Вставка, которая успешно выполняется в Db, но не возвращает (аналогично извлечению одиночного)
общественная асинхронная задача SaveAgencyAsync (элемент агентства)
{
пытаться
{
if (item.Id == null)
{
item.Id = ObjectId.GenerateNewId (). ToString ();
}
Агентство агентство = новое агентство ();
agency = await dbContext.Agency.FindOneAndReplaceAsync (x => x.Id == item.Id, item,
новый FindOneAndReplaceOptions
{
IsUpsert = true,
ReturnDocument = ReturnDocument.After
}
);
агентство по возврату;
}
поймать (исключение ex)
{
бросить экс;
}
}