C# System.ObjectDisposedException-代码在我将其移动到另一个方法之前一直有效

C# System.ObjectDisposedException-代码在我将其移动到另一个方法之前一直有效,c#,.net-core,entity-framework-core,C#,.net Core,Entity Framework Core,我已经查看了错误消息,我发现的所有问题都与EF基础设施的一般设置有关,不管怎样。我找不到一个谈论任何与基础设施无关的东西 你知道为什么把代码移到另一个方法会破坏它吗 编辑 上下文在示例文档的样板文件ConfigureServices中进行了初始化 public class MyOtherModel { [ForeignKey("ID")] public int ID { get; set; } [ForeignKey("TitleID")] public in

我已经查看了错误消息,我发现的所有问题都与EF基础设施的一般设置有关,不管怎样。我找不到一个谈论任何与基础设施无关的东西

你知道为什么把代码移到另一个方法会破坏它吗

编辑

上下文在示例文档的样板文件
ConfigureServices
中进行了初始化

public class MyOtherModel  {
    [ForeignKey("ID")]
    public int ID { get; set; }

    [ForeignKey("TitleID")]
    public int? TitleID { get; set; }
    public virtual LookUp Title { get; set; }
public void配置服务(IServiceCollection服务){
services.AddDbContext(options=>options.UseSqlServer(Configuration.GetConnectionString(“MyModel”));
这很有效

public void ConfigureServices(IServiceCollection services) {
    services.AddDbContext<MyContextModel>(options => options.UseSqlServer(Configuration.GetConnectionString("MyModel")));
PostAsync上的公共异步任务({ MyModel objRecord=新的MyModel(); objRecord.ID=42; objRecord.Name=“Dave”; _上下文。案例投诉人。添加(objRecord); wait_context.SaveChangesAsync(); List lstRecord=新列表(); lstRecord=wait_context.MyOthers .Include(p=>p.Title) .Where(n=>n.MyOtherID==objRecord.ID) .ToListAsync(); 这并不重要

public async Task<IActionResult> OnPostAsync({
    MyModel objRecord = new MyModel();
    objRecord.ID = 42;
    objRecord.Name = "Dave";
    _context.CaseComplainants.Add(objRecord);
    await _context.SaveChangesAsync();

    List<MyOtherModel> lstRecord = new List<MyOtherModel>();
    lstRecord = await _context.MyOthers
        .Include(p => p.Title)
        .Where(n => n.MyOtherID == objRecord.ID)
        .ToListAsync();
PostAsync上的公共异步任务({ MyModel objRecord=新的MyModel(); objRecord.ID=42; objRecord.Name=“Dave”; _上下文。案例投诉人。添加(objRecord); wait_context.SaveChangesAsync(); DoStuff(objRecord.ID); } 专用异步void DoStuff(int-TheID){ List lstRecord=新列表(); lstRecord=wait_context.MyOthers .Include(p=>p.Title) .其中(n=>n.MyOtherID==TheID) .ToListAsync();
了解如何创建和存储上下文会很有用。例外情况是,它已被处理。胡佛并不总是有用的,因为处理调试器的行为有时与实际运行的代码不同。至少,您必须检查“IsDisposed”属性,如果它存在的话。对对象的引用根本不会因为Disposing而改变。Disposing只是指“不再使用”。如果您以后尝试使用它,它会抱怨。该项目完全是样板,没有任何花哨的东西直接来自示例代码和文档。如果有帮助,我添加了
ConfigureServices
。我在整个项目的方法中使用
\u context
,没有问题,但在本例中,将代码放在一个单独的me中thod导致错误。您确定原始代码是异步运行的吗,因为如果调用方法不支持异步,这将同步运行。需要更多信息来查看问题。是的,我已将标题行添加到问题中,以查看您是否正在等待帮助
DoStuff
。可能是
OnPostAsync
返回可以执行
DoStuff
之前的。发生这种情况时,将释放上下文,然后运行
DoStuff
并获得异常。请尝试
等待DoStuff(objRecord.ID)
public async Task<IActionResult> OnPostAsync({
    MyModel objRecord = new MyModel();
    objRecord.ID = 42;
    objRecord.Name = "Dave";
    _context.CaseComplainants.Add(objRecord);
    await _context.SaveChangesAsync();

    List<MyOtherModel> lstRecord = new List<MyOtherModel>();
    lstRecord = await _context.MyOthers
        .Include(p => p.Title)
        .Where(n => n.MyOtherID == objRecord.ID)
        .ToListAsync();
public async Task<IActionResult> OnPostAsync({
    MyModel objRecord = new MyModel();
    objRecord.ID = 42;
    objRecord.Name = "Dave";
    _context.CaseComplainants.Add(objRecord);
    await _context.SaveChangesAsync();

    DoStuff(objRecord.ID);
}

private async void DoStuff(int TheID) {
    List<MyOtherModel> lstRecord = new List<MyOtherModel>();
    lstRecord = await _context.MyOthers
        .Include(p => p.Title)
        .Where(n => n.MyOtherID == TheID)
        .ToListAsync();