c# - 异常:ObjectContext 实例已被释放,不能再用于需要连接的操作
问题描述
我的项目设置了一个 CQRS 框架,该框架调用如下命令:
using (var transaction = dbContext.Database.BeginTransaction())
{
var command =
_container.Resolve<IBusinessCommand<TData, TResult>>(
new TypedParameter(typeof(IHoneyBeeDbContext), dbContext));
var result = await command.ExecuteAsync(data, token);
await dbContext.SaveChangesAsync();
transaction.Commit();
return result;
}
command.ExecuteAsync 函数调用下面的命令函数:
public class CreateMultiScoCourseCommand : IBusinessCommand<CreateMultiScoCourseCommandRequest, CommandResult>
{
private readonly IClock _clock;
private readonly IHoneyBeeDbContext _dbContext;
public CreateMultiScoCourseCommand(IClock clock, IHoneyBeeDbContext dbContext)
{
_clock = clock;
_dbContext = dbContext;
}
public async Task<CommandResult> ExecuteAsync(CreateMultiScoCourseCommandRequest request, CancellationToken token)
{
var estimatedTimeSpan = new TimeSpan(0, request.EstimatedTimeHours, request.EstimatedTimeMinutes, 0);
var newCourse = new Course
{
CreateDate = _clock.UtcNow,
CreateUser = request.CurrentUserId,
Active = true,
Name = request.Name,
DisplayName = request.DisplayName,
Description = request.Description,
OnlineOnly = request.OnlineOnly,
EstimatedTime = (int)estimatedTimeSpan.TotalSeconds,
IsMultiSco = true,
ImportID = request.ImportId,
PreviewImportID = request.PreviewImportId,
PreviewFilePath = request.PreviewFilePath,
FilePath = request.FilePath,
MarketTypeID = request.MarketTypeId.GetValueOrDefault(),
Thumbnail = request.Thumbnail,
ThumbnailFilename = request.ThumbnailFilename,
CEU = request.CEU,
TemplateID = request.TemplateId,
MinimumScore = request.MinimumScore,
ViewPeriod = request.ViewPeriod,
LanguageID = request.LanguageId.GetValueOrDefault()
};
_dbContext.Courses.Add(newCourse);
return CommandResult.WithSuccess();
}
}
传入的请求本质上是表单上的条目。
完成命令后,它会返回事务以完成 SaveChancesAsync() 调用并将其提交到数据库。
我们有几个使用相同工作流程的命令,除了这个之外,所有这些都可以正常工作。对于这个,当它执行 SaveChangesAsync() 时,它会抛出以下错误:
ObjectContext 实例已被释放,不能再用于需要连接的操作
我为这个错误做了一些广泛的谷歌搜索,我在研究中看到的几乎实例是人们谈论 EntityFramework 如何进行延迟加载,并且人们在他们的 LINQ 查询中缺少一些 .Include(x => x.SomeEntity) 语句。显然,情况并非如此,因为我没有对这个特定命令执行任何 LINQ。
我在 SaveChangesAsync() 提交上方放置了一些 ChangeTracking 语句,以验证 Course 对象是唯一在 dbContext 上添加/修改的对象,情况就是如此。
这个命令以前工作过,我只是做了更新以符合一些命名和访问修饰符约定,现在突然间我收到了这个错误。
有谁知道这可能是什么?
解决方案
推荐阅读
- google-bigquery - 如何在 GCP 上执行数据非规范化?
- kubernetes - 与服务器 xxx:6443 的连接被拒绝 - 您是否指定了正确的主机或端口?Kubernetes
- amazon-iam - EKS 集群身份验证问题:用于创建 EKS 集群的用户或角色已从 AWS IAM 中删除
- c++ - 如何使用 Visual Studio C/C++ 编译器 (cl.exe) 预处理我的 Objective-C 代码?
- python - DataFrame.plot() 错误地将东部时间转换为 UCT
- reactjs - 我正在尝试向我的反应客户端添加代理,但出现 404 错误
- android - 如何在高于默认的 BottomNavigationView 上添加指示器?
- excel - 如何改进我的当前区域选择器?
- ruby-on-rails - 在更改我的开发数据库之前我应该知道什么?
- angular - “如果没有描述,'@param' 在 TypeScript 代码中是多余的。” TSLint 错误?