如何防止EF core 5在保存时创建保存点
How to prevent EF core 5 from creating a savepoint when saving
我们在始终在外部管理事务的上下文中使用 EF Core。我们还必须使用 MARS。自从我们升级到 EF Core 5 后,此组合会导致以下警告:
Microsoft.EntityFrameworkCore.Database.Transaction - Savepoints are disabled because Multiple Active
Result Sets (MARS) is enabled. If 'SaveChanges' fails, then the transaction cannot be automatically
rolled back to a known clean state. Instead, the transaction should be rolled back by the application
before retrying 'SaveChanges'. See https://go.microsoft.com/fwlink/?linkid=2149338 for more information.
To identify the code which triggers this warning, call 'ConfigureWarnings(w =>
w.Throw(RelationalEventId.SavepointsDisabledBecauseOfMARS))'.
我同意禁用保存点(至少现在是这样),但我对每个数据库保存的日志消息不太满意...
有没有办法告诉 EF Core 不要使用这个新功能?
事实证明,错误消息中描述的对 ConfigureWarnings
的调用也可用于忽略消息。
但是要注意的一件事是,与警告消息所说的相反,SavepointsDisabledBecauseOfMARS
值不是 RelationalEventId
类型的一部分。相反,它是 SqlServerEventId
类型的一部分。
忽略警告,完整代码如下:
ConfigureWarnings(w =>
w.Ignore(SqlServerEventId.SavepointsDisabledBecauseOfMARS))
我们在始终在外部管理事务的上下文中使用 EF Core。我们还必须使用 MARS。自从我们升级到 EF Core 5 后,此组合会导致以下警告:
Microsoft.EntityFrameworkCore.Database.Transaction - Savepoints are disabled because Multiple Active
Result Sets (MARS) is enabled. If 'SaveChanges' fails, then the transaction cannot be automatically
rolled back to a known clean state. Instead, the transaction should be rolled back by the application
before retrying 'SaveChanges'. See https://go.microsoft.com/fwlink/?linkid=2149338 for more information.
To identify the code which triggers this warning, call 'ConfigureWarnings(w =>
w.Throw(RelationalEventId.SavepointsDisabledBecauseOfMARS))'.
我同意禁用保存点(至少现在是这样),但我对每个数据库保存的日志消息不太满意...
有没有办法告诉 EF Core 不要使用这个新功能?
事实证明,错误消息中描述的对 ConfigureWarnings
的调用也可用于忽略消息。
但是要注意的一件事是,与警告消息所说的相反,SavepointsDisabledBecauseOfMARS
值不是 RelationalEventId
类型的一部分。相反,它是 SqlServerEventId
类型的一部分。
忽略警告,完整代码如下:
ConfigureWarnings(w =>
w.Ignore(SqlServerEventId.SavepointsDisabledBecauseOfMARS))