Sql server 获取ID的EF核心差异会导致使用Instead而非触发器和Scope_标识的问题 背景故事

Sql server 获取ID的EF核心差异会导致使用Instead而非触发器和Scope_标识的问题 背景故事,sql-server,.net-core,entity-framework-core,ef-core-2.2,Sql Server,.net Core,Entity Framework Core,Ef Core 2.2,我有一个应用程序,我正试图转移到.NETCore。此应用程序经过了大量维护。为了在使用原始应用程序时尝试升级应用程序,它将数据库视图放置在大多数表上 这些数据库视图使用而不是触发器。因此,当对视图执行插入时,触发器会将记录添加到正确的表中 然而,当实体框架进行插入时,它会在插入之后添加一个select语句,以获取任何ID(以及任何生成的日期)。由于没有更好的术语,我称之为“周转查询”。此选择使用Scope_标识查找正确的行。但实际插入发生在触发器内部,而不是触发器内部。因此Scope\u Ide

我有一个应用程序,我正试图转移到.NETCore。此应用程序经过了大量维护。为了在使用原始应用程序时尝试升级应用程序,它将数据库视图放置在大多数表上

这些数据库视图使用而不是触发器。因此,当对视图执行插入时,触发器会将记录添加到正确的表中

然而,当实体框架进行插入时,它会在插入之后添加一个select语句,以获取任何ID(以及任何生成的日期)。由于没有更好的术语,我称之为“周转查询”。此选择使用Scope_标识查找正确的行。但实际插入发生在触发器内部,而不是触发器内部。因此
Scope\u Identity()
返回null

为了在normal(full).Net中解决这个问题,select语句被添加到Instead Of触发器中。EntityFramework6仍然会添加它的调用,但它会接受第一个结果并感到高兴。(第二次调用的结果为空,但被忽略。)

问题: 现在我正在迁移到.NETCore3(和EFCore)。当我运行insert语句时,它有两个结果集(就像在普通(完整的.NET Framework)中一样)

然而,这种变通方法似乎不再有效。插入后,我出现以下错误:

索引超出了数组的边界

我只能假设它现在正在查看第二个集合(我看不出错误的任何其他原因)


有没有办法告诉.NET Core(EF Core)如何查找其“周转查询”的结果?

我想出了这个办法。实体框架核心仍然是第一个结果。但EntityFramework6愿意忽略缺少的列,其中EntityFrameworkCore给出了“索引超出数组边界”错误

因此,如果出现此错误,请查看Entity Framework Core期望的列(通过探查器(如MiniProfiler))并确保它与Instead of触发器中的列匹配