C# EF Core context.SaveChanges()在上一条语句之前执行

C# EF Core context.SaveChanges()在上一条语句之前执行,c#,sql-server,entity-framework,.net-core,entity-framework-core,C#,Sql Server,Entity Framework,.net Core,Entity Framework Core,我正在为我工作的公司开发一个内部工具,用于将数据从旧的SQLite数据库迁移到新的SQL Server数据库。在完成所有实体转换并将它们添加到目标上下文之后,我想将它们提交到目标数据库实例,并通过控制台向用户更新正在进行的提交操作。然而,每当我运行这个程序时,直到上下文完成刷新更改之后,字符串才会被打印到控制台 我能想到的唯一一件事是,由于某种原因,.NET核心运行时会动态地重新排序操作,这意味着直到提交成功或失败后才会调用print语句。这在使用该工具的用户体验方面是有问题的,因为不清楚是否真

我正在为我工作的公司开发一个内部工具,用于将数据从旧的SQLite数据库迁移到新的SQL Server数据库。在完成所有实体转换并将它们添加到目标上下文之后,我想将它们提交到目标数据库实例,并通过控制台向用户更新正在进行的提交操作。然而,每当我运行这个程序时,直到上下文完成刷新更改之后,字符串才会被打印到控制台

我能想到的唯一一件事是,由于某种原因,.NET核心运行时会动态地重新排序操作,这意味着直到提交成功或失败后才会调用print语句。这在使用该工具的用户体验方面是有问题的,因为不清楚是否真的发生了任何事情,因为该工具只会挂起一段时间

你知道这里发生了什么,或者我如何强制语句按所需的顺序执行吗

私有静态无效提交更改(InductosenseContext destinationContext)
{
写入(“将更改提交到目标数据库…”);
destinationContext.SaveChanges();
控制台。WriteLine(“完成”);
}

可能还有另一个方法在CommitChanges之前执行context.SaveChanges()method@JamalSalman不是,;这只是一个小工具,这是唯一调用
SaveChanges()
的地方。如果我理解正确,如果您使用调试器并在
destinationContext.SaveChanges()
上设置断点,控制台中不会打印任何内容,对吗?您如何确定更改已“刷新”在控制台输出完成之前?是否从工作线程/任务调用CommitChanges?虽然可以从后台线程调用
Console.Write
,但似乎.Net Core一直在修改控制台在控制台日志记录方面的性能,并引入了队列,因此在.Net Core 2.2或3中,实际的UI输出可能不会被阻止。(我发现试图为.Net core挖掘准确的行为变化是一种令人沮丧的经历。)如果您正在运行后台,我会尝试将控制台更新发送回UI线程。(不必如此,但有了Core,任何规则都可能被打破)