Я использую EventBus для уведомления других микросервисов.Когда клиент спасен.Интеграция событий должна синхронизировать другие микросервисы. Я делаю интеграцию событий.Я получил пример от Microsoft о шине событий.
Когда приложение приходит с этим методом
public async Task AddAndSaveEventAsync(IntegrationEvent evt)
{
await _eventLogService.SaveEventAsync(evt, _osDataContext.GetCurrentTransaction.GetDbTransaction());
}
Вскоре после входа в этот метод оно проходит через другой метод, где возникает ошибка
namespace Microsoft.EntityFrameworkCore.Storage
{
public static class DbContextTransactionExtensions
{
public static DbTransaction GetDbTransaction([NotNullAttribute] this IDbContextTransaction dbContextTransaction);
}
}
Возвращает ошибку: Value can not be null. Parameter name: dbContextTransaction
У меня есть класс контекста базы данных
public partial class ApplicationDataContext : DbContext
{
public ApplicationDataContext(DbContextOptions<ApplicationDataContext> options) : base(options)
{
}
private IDbContextTransaction _currentTransaction;
public IDbContextTransaction GetCurrentTransaction => _currentTransaction;
public async Task BeginTransactionAsync()
{
_currentTransaction = _currentTransaction ?? await Database.BeginTransactionAsync(IsolationLevel.ReadCommitted);
}
public async Task CommitTransactionAsync()
{
try
{
await SaveChangesAsync();
_currentTransaction?.Commit();
}
catch
{
RollbackTransaction();
throw;
}
finally
{
if (_currentTransaction != null)
{
_currentTransaction.Dispose();
_currentTransaction = null;
}
}
}
public void RollbackTransaction()
{
try
{
_currentTransaction?.Rollback();
}
finally
{
if (_currentTransaction != null)
{
_currentTransaction.Dispose();
_currentTransaction = null;
}
}
}
public const string DEFAULT_SCHEMA = "serviceorder";
public DbSet<model.ServiceOrder> ServiceOrder { get; set; }
public DbSet<ServiceOrderType> ServiceOrderType { get; set; }
public DbSet<ContactRole> ContactRole { get; set; }
public DbSet<Contact> Contact { get; set; }
public DbSet<DocumentType> DocumentType { get; set; }
public DbSet<Document> Document { get; set; }
public DbSet<Customer> Customer { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new ServiceOrderTypeConfiguration());
modelBuilder.ApplyConfiguration(new ServiceOrderConfiguration());
modelBuilder.ApplyConfiguration(new CustomerConfiguration());
modelBuilder.ApplyConfiguration(new DocumentConfiguration());
modelBuilder.ApplyConfiguration(new DocumentTypeConfiguration());
modelBuilder.ApplyConfiguration(new ContactConfiguration());
modelBuilder.ApplyConfiguration(new ContactRoleConfiguration());
}
}