Cosmos DB вставляет все данные, но SQL Server только вводит некоторые записи в транзакциюC#

Место общения программистов C#
Ответить
Anonymous
 Cosmos DB вставляет все данные, но SQL Server только вводит некоторые записи в транзакцию

Сообщение Anonymous »

Я работаю над системой, которая первоначально хранила данные в Azure SQL Server. Однако из -за ограничений в дизайне таблицы, которые сделали его непригодным для анализа активности по продвижению, мы решили также сохранить данные в базе данных NOSQL для лучшего запроса и анализа. < /P>
Я использую транзакцию при сохранении данных на SQL SQL Server и Azure Cosmos DB. Насколько я понимаю, как _dbcontext.savechangesasync , так и Transaction.commitasync являются атомными операциями, поэтому я ожидал, что все или ни одна из записей будет сохранена. Согласно официальной документации, «транзакция будет автоматической обработкой при утилизации, если какая-либо команда не удастся». Однако я заметил, что: < /p>
  • Все данные успешно вставлены в Azure Cosmos db. < /Strong> < /li>
    < li> только некоторые записи появляются в Azure SQL Server.
Дополнительная информация:
  • Ожидаемое поведение:

    SQL Server и Cosmos DB должны хранить одинаковое количество записей. < /li>
    < /ul>
    < /li>
    Вещи, которые я проверил:

    redPoints содержит ожидаемое количество элементов перед вставкой. Недавно мы изменили нашу систему журнала, поэтому мы потеряли данные о прошлых журналах, что затрудняет отладку. < /ul>
    < /li>
    Инструменты:

    net: 6.0 < /li>
    Microsoft .EntityFrameWorkCore: 7.0.7
  • mongodb.drive: 2.22.0

Вопросы: < /strong> < /p>

Что может привести к тому, что SQL Server вставит только некоторые записи, пока космос DB успешно вставляет их все? далее?private async Task SaveRedPointsToDb(
List redPoints,
CancellationToken cancellationToken
)
{
await using var transaction = await _dbContext.Database.BeginTransactionAsync(
cancellationToken
);
try
{
// Azure SQL Server
await _dbContext.RedPoints.AddRangeAsync(redPoints, cancellationToken);
await _dbContext.SaveChangesAsync(cancellationToken);

// Azure Cosmos DB
var redPointDocuments = redPoints.Select(x => new RedPointDocument(x)).toList();
await _redPointCollection.InsertManyAsync(redPointDocuments);

await transaction.CommitAsync(cancellationToken);
}
catch (Exception e)
{
// Log...
}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... ithin-a-tr
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»