c# - 值不能为空。参数名称:dbContextTransaction - IntegrationEvent c#
问题描述
我正在使用 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());
}
}
解决方案
这个错误基本上是。对于不打开连接,即。我正在拨打电话,但没有打开连接。
public async Task AddAndSaveEventAsync(IntegrationEvent evt)
{
await ResilientTransaction.New(_osDataContext).ExecuteAsync(async () =>
{
await _osDataContext.SaveChangesAsync();
await _eventLogService.SaveEventAsync(evt, _osDataContext.Database.CurrentTransaction.GetDbTransaction());
});
}
推荐阅读
- cassandra - 如何解决 Cassandra 中的问题“ConfigurationException:列族 ID 不匹配”
- javascript - 为什么不将 URL 放在状态数组中?
- javascript - Javascript 检查数字是否为 0, 0.0,0.0000
- ansible - 如何重用我编写的 ansible 角色?
- javascript - JavaScript localStorage - 来自多个用户卡的文本输入
- flutter - Flutter:运行“flutter pub get”没有任何反应
- jira - Reportportal 到 JIRA 集成失败并出现错误:无法与外部系统交互
- google-app-engine - 如何保护 App Engine 和 GKE 上的后端 REST API 免受滥用?
- if-statement - 如何将多个单元格合并为 1 个。我正在为我的团队创建一个佣金排行榜,我希望它将他们的所有佣金汇集到一个
- docker - 运行 DockerFile 后找不到 Python 自定义模块