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
相关产品推荐
相关产品推荐

