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

Database.ExecuteSqlCommand返回值是什么?SaveOrUpdate代码场景问询

关于Database.ExecuteSqlCommand返回值的问题解答

咱们先从第一个基础问题说起:
Database.ExecuteSqlCommand方法的返回值是受SQL语句影响的总行数——简单说就是执行这条SQL后,数据库里被插入、更新、删除等修改操作实际波及到的记录数量。

接下来看你给出的带MERGE语句的SaveOrUpdate方法场景,先把你的代码补全并格式化一下(顺便修正了SQL里的语法小问题,比如缺逗号的地方):

public int SaveOrUpdate(MyEntity entity) { 
    var sql = @"MERGE INTO MyEntity 
                USING ( SELECT @id as Id, @myField AS MyField ) AS entity 
                ON MyEntity.Id = entity.Id 
                WHEN MATCHED THEN 
                    UPDATE SET Id = @id, MyField = @myField 
                WHEN NOT MATCHED THEN 
                    INSERT (Id, MyField) VALUES (@id, @myField);";
    object[] parameters = { 
        new SqlParameter("@id", entity.Id), 
        new SqlParameter("@myField", entity.myField) 
    }; 
    return context.Database.ExecuteSqlCommand(sql, parameters);
}

这个场景里,ExecuteSqlCommand的返回值要根据MERGE的实际执行结果来定:

  • 如果数据库中已经存在对应Id的记录,且执行了更新操作(只要有字段值发生变化),返回值是1;如果传入的字段和现有记录完全一致,数据库没做任何实际修改,返回值就是0。
  • 如果数据库中没有对应Id的记录,触发插入操作,返回值是1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:12:46