C# EF Core中的SaveChanges()在不需要时调用

C# EF Core中的SaveChanges()在不需要时调用,c#,entity-framework,linq,C#,Entity Framework,Linq,我正在MS VisualStudio Community 2019中使用ASP.NET Core MVC 3.1,以及EF Core和C#,版本为16.7.7。在Startup.cs中的ConfigureServices()中,我已关闭跟踪: services .AddDbContext<DC>(options => options .UseSqlServer(Configuration.GetConnectionString("DC&

我正在MS VisualStudio Community 2019中使用ASP.NET Core MVC 3.1,以及EF Core和C#,版本为16.7.7。在Startup.cs中的ConfigureServices()中,我已关闭跟踪:

    services
      .AddDbContext<DC>(options => options
      .UseSqlServer(Configuration.GetConnectionString("DC"))
      .UseQueryTrackingBehavior(
          QueryTrackingBehavior.NoTracking));
插入和报告功能具有以下模式:

    public static void InsertRecord(DC dc, Record r)
    {
        dc.Add(r);

        try
        {
            throw new Exception("Test A");
            dc.SaveChanges();
        }
        catch (Exception ex)
        {
            ReportException(ex);
        }
    }

    public static void ReportException(Exception ex)
    {
        ///
    }
当我在一个操作中对不同的记录多次调用插入函数时,除了最后一条记录之外,所有记录都保存到数据库中,并且每个记录上都报告了预期的异常


我没想到会有任何记录保存到数据库中。我应该有吗?如果是,原因是什么?

看起来您正在将共享上下文传递到静态函数中。是否有可能在其他地方调用了上下文的SaveChanges?您可以删除代码
dc.SaveChanges()
并查看是否将向数据库添加数据。ReportException是否使用DbContext(DC)?如果注入的DC被以后调用SaveChanges()的其他操作使用,则即使调用了异常,
DC.Add(r)
仍将保持挂起插入。DbContext应该是相对短暂的,例如在给定操作的using块中,或者在作为有效工作单元的单个请求中。当上下文引用存在时间过长时,会出现问题,并将您以后希望中止/回滚的更改排入队列,结果发现这些更改已提交,或在调用以后的
SaveChanges()
时导致异常。感谢大家提供的有用意见。问题似乎是由于从插入函数调用的另一个函数调用了SaveChanges()。
    public static void InsertRecord(DC dc, Record r)
    {
        dc.Add(r);

        try
        {
            throw new Exception("Test A");
            dc.SaveChanges();
        }
        catch (Exception ex)
        {
            ReportException(ex);
        }
    }

    public static void ReportException(Exception ex)
    {
        ///
    }