【发布时间】:2019-09-27 06:28:46
【问题描述】:
我正在使用 EventBus 来通知其他微服务。当客户被保存时。事件集成必须保持其他微服务同步 我正在做一个事件集成。我从微软那里得到了一个关于事件总线的例子。
当应用程序到达此方法时
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());
}
}
【问题讨论】:
-
_osDataContext.GetCurrentTransaction正在返回 null。
标签: c# asp.net entity-framework microservices event-bus