У меня проблема с сохранением данных в базе данных SQL из основного API-приложения .Net.
Я использую универсальный шаблон репозитория, где универсальный класс репозитория принимает TContext в качестве параметра и создает соответствующий контекст БД.
Вот как выглядит мой общий репозиторий:
public abstract class Repository<TContext, TEntity> : IRepository<TEntity>
Внутри класса у меня есть метод для создания экземпляра данного контекста БД:
public TContext CreateContext() {
return (TContext)Activator.CreateInstance(typeof(TContext), Options);
}
И я обертываю метод CreateContext вИспользование оператора для создания экземпляра контекста БД:
public TEntity Add(TEntity entity) {
using (var context = CreateContext()) {
var added = context.Set<TEntity>().Add(entity);
context.SaveChanges();
return added.Entity;
}
}
У меня есть сложная сущность, которая содержит несколько других сущностей (связанных данных).Когда API получает вызовы для обновления связанных объектов в последовательном порядке, все работает нормально, записи в базе данных обновляются.
Хотя возникает проблема, когда API получает одновременные вызовы для нескольких связанных объектов одновременно.При пошаговой отладке я могу заметить, что записи базы данных обновляются, но когда API возвращает ответ, я все еще получаю старые значения, а записи базы данных снова перезаписываются старыми значениями.
Я не мог 'Придумайте решение этой проблемы, кроме ожидания завершения каждого вызова и выполнения вызовов в последовательном порядке, что является значительным ударом по производительности.
Приложение работает с использованием .Net core 2.2.