You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core调用SaveChanges遇多余结果集警告,如何解决?

问题描述

我在[dbo].[Customers]表上创建了一个INSTEAD OF INSERT触发器,用于自定义插入并返回Id,触发器代码如下:

CREATE TRIGGER [dbo].[ReferenceTrigger]  
ON [dbo].[Customers] 
INSTEAD OF INSERT   
AS 
BEGIN
    DECLARE @reference varchar(6); --And set

    INSERT INTO Customers
    OUTPUT inserted.Id
    SELECT 
        --Here the original fields...
        Reference = @string
    FROM inserted;

    SELECT Id FROM Customers WHERE @@ROWCOUNT > 0 AND Id = SCOPE_IDENTITY();
END

同时在EF Core中配置了实体映射:

internal class CustomerMap : EntityMappingConfiguration<Customer>
{
    public override void Map(EntityTypeBuilder<Customer> b)
    {
        b.ToTable("Customers").HasKey(t => t.Id);
        b.ToTable(t => t.HasTrigger("ReferenceTrigger"));
        b.Property(t => t.Id).HasColumnName("Id").ValueGeneratedOnAdd();
    }

    //etc...
}

调用数据库上下文的CommitChanges()方法时,收到如下警告:

读取SaveChanges操作结果时发现意外的尾随结果集;这可能表示存储过程返回了结果集,但未在EF模型中配置。请检查存储过程定义。

解决方法

警告的核心原因是触发器返回了两个结果集:

  1. INSERT语句中的OUTPUT inserted.Id输出第一个结果集
  2. 末尾的SELECT Id FROM Customers...输出第二个结果集

EF Core仅预期获取插入后的Id结果集,多余的结果集会被判定为“意外尾随结果集”,只需修改触发器代码,确保只返回一个结果集即可消除警告。

方案一:保留OUTPUT语句,移除末尾SELECT

修改后的触发器代码:

CREATE TRIGGER [dbo].[ReferenceTrigger]  
ON [dbo].[Customers] 
INSTEAD OF INSERT   
AS 
BEGIN
    DECLARE @reference varchar(6); --And set

    INSERT INTO Customers
    OUTPUT inserted.Id
    SELECT 
        --Here the original fields...
        Reference = @reference --修正原代码笔误:@string应为@reference
    FROM inserted;
END

OUTPUT inserted.Id已能返回插入的Id,无需额外执行SELECT查询。

方案二:移除OUTPUT语句,保留末尾SELECT

若更倾向于用SCOPE_IDENTITY()获取Id,修改后的触发器代码:

CREATE TRIGGER [dbo].[ReferenceTrigger]  
ON [dbo].[Customers] 
INSTEAD OF INSERT   
AS 
BEGIN
    DECLARE @reference varchar(6); --And set

    INSERT INTO Customers
    SELECT 
        --Here the original fields...
        Reference = @reference --修正原代码笔误:@string应为@reference
    FROM inserted;

    IF @@ROWCOUNT > 0
    BEGIN
        SELECT SCOPE_IDENTITY() AS Id;
    END
END

内容的提问来源于stack exchange,提问作者Ivan Debono

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:37:30